私はこのリストの理解をしばらく整理することに苦労しています。私はそれについて2つの具体的なことを理解していません。エリクシールどのようにリストの理解を並べ替えるのですか?
for x <- span(2, n), y <- span(2, n), x <= y, x * y <= n, into: [], do: x * y
これは、nまでのすべての非素数のリストを作成することです。私がしようとした場合:今
for x <- span(2, n), y <- span(2, n), x <= y, x * y <= n, into: [], do: x * y
|> Enum.sort
for x <- span(2, n), y <- span(2, n), x <= y, x * y <= n, into: [], do: x * y
|> Enum.sort()
どちらの方法は私にエラーを与える:
protocol Enumerable not implemented for 4
だから私の最初の質問はどのようにパイプを使用して理解を並べ替えるんでしょうか?
EDIT ::による重複が存在していると私がしようとした場合、私は彼らに=>
に気付いていないに削除:
comps = for x <- span(2, n), y <- span(2, n), x <= y, x * y <= n, into: [], do: x * y
Enum.sort(comps)
リストがソートされたが、今では、リスト内の重複を示しています。 私は変数に格納し、そうでなければそれを格納しないと、理解の出力に重複が含まれているのはなぜですか?
これは、やや恣意的なやりとりのようです。
「スパン」とは何ですか? for(x < - ..、...)|> Enum.sort'を実行することはできますが、最初のスニペットに重複がなく、最後のスニペットには重複がありません。 [MCVE](http://stackoverflow.com/help/mcve)を投稿できますか? – Dogbert
@Dogbert sorry spanは範囲の実装です。私はProgramming Elixirの本を読んでいて、作者は独自の範囲の実装を作成していました(実際には範囲をカバーするリストを作成しています)。 – smkarber
'for x < - 2.10、y < - 2..10、x <= y、x * y <= n、into:[]、do:x * y'は注意深く見れば重複しています。 – Dogbert