1
我一直在努力排序這個列表理解一段時間了,我不明白它的兩個具體的事情。Elixir你如何排序列表理解?
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
所以我的第一個問題是你如何排序使用管道修真?
編輯::刪除,原因是重複的存在和我沒有注意到它們=>
如果我嘗試:
comps = for x <- span(2, n), y <- span(2, n), x <= y, x * y <= n, into: [], do: x * y
Enum.sort(comps)
列表排序,但現在它顯示在列表中重複。 我的第二個問題是爲什麼理解的輸出包含重複項,如果我將它存儲在一個變量中,否則不包含它們?
這似乎是一個相當隨意的互動。
什麼是span?你可以做'for(x < - ..,...)|> Enum.sort',但是你不可能在第一個代碼段中沒有重複,並且你在最後一個代碼段中有它。你可以發佈[MCVE](http://stackoverflow.com/help/mcve)嗎? – Dogbert
@Dogbert對不起span只是範圍的實現。我正在編寫Programming Elixir一書,作者讓我們創建自己的範圍實現(實際上只是創建一個覆蓋範圍的列表),但是如果我將調用更改爲範圍,則其效果相同。 – smkarber
對於x < - 2..10,y < - 2..10,x <= y,x * y <= n,轉換爲:[],do:x * y'確實有重複。 – Dogbert