2016-02-25 60 views
1

nthrest函數的調用方式如下:(nthrest coll n)clojure nthrest和nthnext自變量的順序

nthnext函數的調用方式如下:(nthnext coll n)

我認爲規則是coll是最後一個參數(如map,reduce,filter ...)。至少我是這麼想的,特別是在使用宏時。

那麼,爲什麼nthrest爲不同的東西,尤其是考慮到它是在1.3版本引入?

另見(從clojuredocs):

(nthrest (range 10) 5) ;;=> (5 6 7 8 9) 
(drop 5 (range 10)) ;;=> (5 6 7 8 9) 

是因爲它看起來在這種情況下更接近rest?如果是的話,那麼意味着還有另一個更強大的「規則」取代了我上面提到的我沒有意識到的那個呢?

+1

'nnthrest'和'nthnext'在參數順序'[coll n]'後面跟着'nnth'。 'nnth'模仿'get',它只適用於索引集合。 – Thumbnail

+0

@Thumbnail正確。我想我應該編輯我的問題,它是關於'nth'和'get'與'map','reduce','filter'然後。如果有一個約定,他們不會更容易寫作嗎? – nha

+1

我想這是因爲'get'本身或多或少是可選的,所以將索引放在最後保留形狀。 – Thumbnail

回答

1

我其實覺得現在有道理。是的,如果線程總是處於同一位置,線程將會很好,但線程並不是唯一的問題。

例如,partial函數只能在函數參數列表的開頭部分填充參數,並且沒有可以反過來操作的部分最後一個。我很少使用partial來實現一個函數,該函數接受一個集合並從中返回一個固定鍵的值,但我經常創建一個從一個固定集合中獲取一個鍵並返回其值的函數。

諸如mapreduce之類的函數對於換能器而言是有意義的。通過省略集合創建傳感器是一個概念上合理的事情 - 不要將我的映射調用與我想要運行它的集合相耦合。我喜歡將map(和其他收集函數的類似傳感器返回版本)的單一版本作爲默認版本,並且有一個方便的參數,使我可以爲那些我不想要的情況指定集合重新使用我的換能器。在這種情況下,最後收集是有意義的。基本上,這是一個品味的問題 - 你更喜歡線程(這是非常不錯的),高階函數或其他東西的偏見嗎?我建議使用as->,不要擔心太多!