Tôi đang làm việc thông qua SICP - một bài tập là thực hiện foreach (liều lượng). Đây là bài tập học thuật. Trong clojure, đây là những gì tôi đã đưa ra:thực hiện foreach (liều lượng) trong clojure
(defn for-each [proc, items]
(if (empty? items) nil
(do
(proc (first items))
(recur proc (rest items)))))
nhưng, tôi là một chút u ám về nếu do
là lừa dối, bởi vì do
là một hình thức đặc biệt trong clojure và tôi không nghĩ rằng bất cứ điều gì như thế có được giới thiệu trong SICP. có câu trả lời tối giản hơn không?
Đây là một nỗ lực mà chỉ thực hiện proc trên yếu tố cuối cùng:
(defn for-each-2 [proc, items]
(let [f (first items)
r (rest items)]
(if (empty? r)
(proc f)
(recur proc r))))
Bạn ổn. SICP là thủ đoạn ở đây. Xem văn bản rất nhỏ của chú thích cuối trang 3 trong: http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-20.html#call_footnote_Temp_323. Bất cứ khi nào bạn đang thực hiện lệnh 'cond' trong SICP, bạn đã có một' bắt đầu' ngầm định để chơi cho mỗi mệnh đề của 'cond'. Và 'bắt đầu' trong SICP là khá nhiều' do' trong Clojure. – dyoo