【发布时间】:2018-07-31 13:11:54
【问题描述】:
我有这个变量,hand,当我自己定义它时它工作得很好。
(def yourHand
(map
;;fn
#(let [x %]
(cond
;;hearts
(< x 10) (* x -1)
(< x 13) -10
;;diamonds
(< x 23) (* (mod x 13) -1)
(< x 26) -10
;;clubs
(< x 36) (mod x 13)
(< x 39) 10
;;spades
(< x 49) (mod x 13)
(< x 52) 10
))
;;list
(take (rand-int 12) (repeatedly #(+ 1 (rand-int 52))))))
我想在这里的这个函数中使用这个变量。当我先定义变量然后在函数中使用它的名称时,这很好用。
(reduce + (vec (map #(let [x %]
(cond
(= x 1) 1
:else 0
))
yourHand)))
当我尝试像这样在函数中定义变量时,问题就出现了。
(reduce + (vec (map #(let [x %]
(cond
(= x 1) 1
:else 0
))
(def hand
(map
;;fn
#(let [x %]
(cond
;;hearts
(< x 10) (* x -1)
(< x 13) -10
;;diamonds
(< x 23) (* (mod x 13) -1)
(< x 26) -10
;;clubs
(< x 36) (mod x 13)
(< x 39) 10
;;spades
(< x 49) (mod x 13)
(< x 52) 10
))
;;list
(take (rand-int 12) (repeatedly #(+ 1 (rand-int 52)))))))))
如果不是两件事,这将是不必要的。首先,如果可能的话,我想把这个程序浓缩成一个函数(我认为它/是/可能的!)。其次,我需要在程序的另一点使用这个变量,所以我需要能够以某种方式引用它。
无论如何,当我尝试评估上述函数时,它抱怨它不知道“如何从:clojure.lang.Var 创建 ISeq”。 (这是错误:IllegalArgumentException Don't know how to create ISeq from: clojure.lang.Var clojure.lang.RT.seqFrom (RT.java:542))我假设这意味着它不知道如何将我的变量用作向量...但是当我在函数外部定义变量时,它似乎可以将其用作向量!
有什么建议吗?
【问题讨论】:
标签: clojure functional-programming var