Clojure коллекция труб один за другим - PullRequest
0 голосов
/ 17 октября 2018

Как в Clojure обрабатывают коллекции, как в потоках Java - одну за другой через все функции вместо оценки всех элементов во всем кадре стека.Также я бы описал это как каналы Unix (следующая программа извлекает фрагмент за фрагментом из предыдущего).

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вот простой пример от ClojureDocs.org

;; Use of `->` (the "thread-first" macro) can help make code
;; more readable by removing nesting. It can be especially
;; useful when using host methods:

;; Arguably a bit cumbersome to read:
user=> (first (.split (.replace (.toUpperCase "a b c d") "A" "X") " "))
"X"

;; Perhaps easier to read:
user=> (-> "a b c d" 
           .toUpperCase 
           (.replace "A" "X") 
           (.split " ") 
           first)
"X"

Как всегда, не забудьте Clojure CheatSheet или Clojure дляХрабрый и Истинный .

0 голосов
/ 17 октября 2018

Насколько я понимаю ваш вопрос, вы можете рассмотреть две вещи.

Во-первых, понять абстракцию последовательности .Это способ просмотра коллекций, который потребляет их одну за другой и лениво .Это важная идиома Clojure, и вы встретите такие хорошо известные функции, как map, filter, reduce и многие другие.Также будет важен макрос ->>, который уже упоминался в комментарии.

После этого, когда вы хотите копать глубже, вы, вероятно, захотите заглянуть в преобразователи и * 1016 редукторы *.В упрощенно упрощенном виде они позволяют объединить несколько ленивых функций в одну функцию, а затем обрабатывать коллекцию с меньшим количеством лени, меньшим потреблением памяти, большей производительностью и, возможно, в нескольких потоках.Я считаю, что это сложные темы.Возможно, последовательности уже соответствуют тому, что вы искали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...