2016-09-27 9 views
1

私はこのリストの理解をしばらく整理することに苦労しています。私はそれについて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) 

リストがソートされたが、今では、リスト内の重複を示しています。 私は変数に格納し、そうでなければそれを格納しないと、理解の出力に重複が含まれているのはなぜですか?

これは、やや恣意的なやりとりのようです。

+0

「スパン」とは何ですか? for(x < - ..、...)|> Enum.sort'を実行することはできますが、最初のスニペットに重複がなく、最後のスニペットには重複がありません。 [MCVE](http://stackoverflow.com/help/mcve)を投稿できますか? – Dogbert

+0

@Dogbert sorry spanは範囲の実装です。私はProgramming Elixirの本を読んでいて、作者は独自の範囲の実装を作成していました(実際には範囲をカバーするリストを作成しています)。 – smkarber

+0

'for x < - 2.10、y < - 2..10、x <= y、x * y <= n、into:[]、do:x * y'は注意深く見れば重複しています。 – Dogbert

答えて

2

さらに解説すると、解答は配管前の括弧内の理解を含むものとする。

上記のコードは解決策です。括弧は配管の補足をブロック形式では必要ありませんが、インラインの補完には括弧が必要です。

私は読書することにより、これを発見:Elixir: error when piping to a function the result of inline comprehension

を私はエリクサーの理解を探索したが、私は用語「インライン理解」の知らなかったとして、私は、以前の私の投稿には、この問題を発見しませんでした。

関連する問題