Clojure:我正在尝试使用';一些';而不是';多塞克';但我真的不知道如何使用它
在此场景中,如何将“doseq”替换为“some”。我对clojure不熟悉Clojure:我正在尝试使用';一些';而不是';多塞克';但我真的不知道如何使用它,clojure,Clojure,在此场景中,如何将“doseq”替换为“some”。我对clojure不熟悉 (def handle (atom ())) ;; #'user/players ;; conjoin a keyword into that list (swap! handlers conj [:report "handles"]) ;;=> ([:report "handles"]) ;; conjoin a second ke
(def handle (atom ()))
;; #'user/players
;; conjoin a keyword into that list
(swap! handlers conj [:report "handles"])
;;=> ([:report "handles"])
;; conjoin a second keyword into the list
(swap! handlers conj [:demo "handles2"])
;;=> ([:demo "handles2"] [:report "handle"])
(doseq [[a b] @handlers] (println a "--" b))
;;=> :demo -- handles2
;;=> :report -- handles
和的Clojure文档中包含了一些示例,这些示例可以帮助您了解使用什么以及如何使用它
关于你的情况,有几件事我不知道,但也许我可以用这些例子来帮助你
根据条件检测是否存在某些内容。如果谓词返回truthy,则返回谓词的结果 接受谓词和集合 谓词示例:
#(= 2 %) ; Equals 2
(fn [val] (= val "user3438838")) ; equals your username
[1 2 3 4 5 6 7 8]
["user3438838" "programs" "in" "Clojure"]
[x ["user3438838" "programs" "in" "Clojure"]]
[x [1 2 3 4 5 6 7 8]]
; Note: Can use multiple [x (range 10) y (range 10 20)]
(println x)
(println (str "The number/word is: " x))
收集示例:
#(= 2 %) ; Equals 2
(fn [val] (= val "user3438838")) ; equals your username
[1 2 3 4 5 6 7 8]
["user3438838" "programs" "in" "Clojure"]
[x ["user3438838" "programs" "in" "Clojure"]]
[x [1 2 3 4 5 6 7 8]]
; Note: Can use multiple [x (range 10) y (range 10 20)]
(println x)
(println (str "The number/word is: " x))
让我们来评估以下各项的组合:
(some #(= 2 %) [1 2 3 4 5 6 7 8]) ; => true
(some #(= 2 %) ["user3438838" "programs" "in" "Clojure"]) ; => nil
(some (fn [val] (= val "user3438838")) [1 2 3 4 5 6 7 8]) ; => nil
(some (fn [val] (= val "user3438838")) ["user3438838" "programs" "in" "Clojure"]) => true
为序列的所有元素实现一个表达式,以获得副作用。这是我从JS中寻找的第一个函数,但它通常不是正确的(它没有利用惰性评估、降低性能的优势)。通常希望应用递归表达式,例如
loop
和recur
,但是doseq
在这里可能有意义
我们将采用与some
doseq
采用序列和表面上使用序列中每个元素的表达式
序列示例:
#(= 2 %) ; Equals 2
(fn [val] (= val "user3438838")) ; equals your username
[1 2 3 4 5 6 7 8]
["user3438838" "programs" "in" "Clojure"]
[x ["user3438838" "programs" "in" "Clojure"]]
[x [1 2 3 4 5 6 7 8]]
; Note: Can use multiple [x (range 10) y (range 10 20)]
(println x)
(println (str "The number/word is: " x))
主体表达示例:
#(= 2 %) ; Equals 2
(fn [val] (= val "user3438838")) ; equals your username
[1 2 3 4 5 6 7 8]
["user3438838" "programs" "in" "Clojure"]
[x ["user3438838" "programs" "in" "Clojure"]]
[x [1 2 3 4 5 6 7 8]]
; Note: Can use multiple [x (range 10) y (range 10 20)]
(println x)
(println (str "The number/word is: " x))
现在我们将结合这些:
(doseq [x ["user3438838" "programs" "in" "Clojure"]] (println x)) ; Prints "user3438838\nprograms\nin\nClojure"
(doseq [x ["user3438838" "programs" "in" "Clojure"]] (println (str "The number/word is: " x))) ; Prints "The word is: user3438838 ..."
(doseq [x [1 2 3 4 5 6 7 8]] (println x)) ; Prints "1\n2\n3\n4\n5\n6\n7\n8
(doseq [x [1 2 3 4 5 6 7 8]] (println (str "The number/word is: " x))) ; Prints "The number/word is: 1 ..."
希望这有助于你理解两者 如果你是新手,我认为学习Clojure的入门书是他描述的(而不是你通常希望使用惰性/递归计算表达式的
doseq
b/c)。Clojure文档中有很多例子,可以帮助你弄清楚使用什么和如何使用它
关于你的情况,有几件事我不知道,但也许我可以用这些例子来帮助你
根据条件检测是否存在某些内容。如果谓词返回truthy,则返回谓词的结果 接受谓词和集合 谓词示例:
#(= 2 %) ; Equals 2
(fn [val] (= val "user3438838")) ; equals your username
[1 2 3 4 5 6 7 8]
["user3438838" "programs" "in" "Clojure"]
[x ["user3438838" "programs" "in" "Clojure"]]
[x [1 2 3 4 5 6 7 8]]
; Note: Can use multiple [x (range 10) y (range 10 20)]
(println x)
(println (str "The number/word is: " x))
收集示例:
#(= 2 %) ; Equals 2
(fn [val] (= val "user3438838")) ; equals your username
[1 2 3 4 5 6 7 8]
["user3438838" "programs" "in" "Clojure"]
[x ["user3438838" "programs" "in" "Clojure"]]
[x [1 2 3 4 5 6 7 8]]
; Note: Can use multiple [x (range 10) y (range 10 20)]
(println x)
(println (str "The number/word is: " x))
让我们来评估以下各项的组合:
(some #(= 2 %) [1 2 3 4 5 6 7 8]) ; => true
(some #(= 2 %) ["user3438838" "programs" "in" "Clojure"]) ; => nil
(some (fn [val] (= val "user3438838")) [1 2 3 4 5 6 7 8]) ; => nil
(some (fn [val] (= val "user3438838")) ["user3438838" "programs" "in" "Clojure"]) => true
为序列的所有元素实现一个表达式,以获得副作用。这是我从JS中寻找的第一个函数,但它通常不是正确的(它没有利用惰性评估、降低性能的优势)。通常希望应用递归表达式,例如
loop
和recur
,但是doseq
在这里可能有意义
我们将采用与some
doseq
采用序列和表面上使用序列中每个元素的表达式
序列示例:
#(= 2 %) ; Equals 2
(fn [val] (= val "user3438838")) ; equals your username
[1 2 3 4 5 6 7 8]
["user3438838" "programs" "in" "Clojure"]
[x ["user3438838" "programs" "in" "Clojure"]]
[x [1 2 3 4 5 6 7 8]]
; Note: Can use multiple [x (range 10) y (range 10 20)]
(println x)
(println (str "The number/word is: " x))
主体表达示例:
#(= 2 %) ; Equals 2
(fn [val] (= val "user3438838")) ; equals your username
[1 2 3 4 5 6 7 8]
["user3438838" "programs" "in" "Clojure"]
[x ["user3438838" "programs" "in" "Clojure"]]
[x [1 2 3 4 5 6 7 8]]
; Note: Can use multiple [x (range 10) y (range 10 20)]
(println x)
(println (str "The number/word is: " x))
现在我们将结合这些:
(doseq [x ["user3438838" "programs" "in" "Clojure"]] (println x)) ; Prints "user3438838\nprograms\nin\nClojure"
(doseq [x ["user3438838" "programs" "in" "Clojure"]] (println (str "The number/word is: " x))) ; Prints "The word is: user3438838 ..."
(doseq [x [1 2 3 4 5 6 7 8]] (println x)) ; Prints "1\n2\n3\n4\n5\n6\n7\n8
(doseq [x [1 2 3 4 5 6 7 8]] (println (str "The number/word is: " x))) ; Prints "The number/word is: 1 ..."
希望这有助于你理解两者
如果你是新来的,我认为学习Clojure的入门书是他描述的(而不是你通常想要使用惰性/递归计算表达式的
doseq
b/c)。我只使用Clojure编写代码,而不是ClojureScript,而是基于语法,#(=:report%)@handlers…)
将以true
的形式启动anon fn,这不是有效的fn调用。我想你基本上是对的,除了(一些#(=:report%)@handlers)
,然后将(fn handle event)移到if
正文中。@AaronBell:很抱歉没有收到你的评论,你能用例子解释一下吗?如果可能,谢谢请用示例和输出更新你的问题。此外,尝试将示例简化到最低限度。请看@AlanThompson:我已经更新了这个问题,请帮我解释一下doseq
和一些做根本不同的事情,你不能用另一个来代替它们。我只使用Clojure而不是ClojureScript编写代码,但是基于语法,(=:report%)@handlers…)
将以true
的形式启动anon fn,这不是有效的fn调用。我想你基本上是对的,除了(一些#(=:report%)@handlers)
,然后将(fn handle event)移到if
正文中。@AaronBell:很抱歉没有收到你的评论,你能用例子解释一下吗?如果可能,谢谢请用示例和输出更新你的问题。此外,尝试将示例简化到最低限度。请看@AlanThompson:我已经更新了这个问题,请帮我回答doseq
和一些做根本不同的事情,你不能用一个替换另一个。