我有一个函数,我需要输入一个单词,我试图让一个变量 x 成为单词变量的排序版本。我不确定我是怎么做到的...我正在尝试将它作为函数的参数传递但不起作用。
我如何传入一个“单词”并使函数内的一个变量等于“单词”的排序版本,这样我就有两个副本,原始单词和单词的 x 版本。这样我就可以继续传递到我需要创建的 map 中。
(for [wordset '("one" "two" "three" "FouR" "wot" "Rheet" "nope" "#")]
(transform2 wordset))
(defn transform2 [word x]
(let [x (sort-string (str/lower-case word))]
(prn x)))
(defn sort-string [s]
(apply str (sort s)))
这是我返回的错误
CompilerException java.lang.RuntimeException: Unable to resolve symbol: x in this context, compiling:(NO_SOURCE_PATH:108:1)
最佳答案
这个表达式对你没有任何作用:
(for [wordset '("one" "two" "three" "FouR" "wot" "Rheet" "nope" "#")]
(transform2 wordset))
您没有将其放置在将使用返回值的任何位置。 for
不像其他语言中的命令式 for 循环。它只是创建一个序列并返回它,它没有修改任何东西。
通常,您还应该使用向量并更喜欢关键字:
[:one :two :three :whatever]
尽管这会改变您正在做的事情的语义,所以也许您有来自其他地方的字符串并且需要使用它们?否则,不要自己使用字符串作为标识符:这就是关键字的作用。
至于你的其他问题,不是很清楚你的意思。你说你想创建一个变量,但不清楚你的意思,因为你的代码没有按照这些思路做任何事情。
关于clojure - 将抽象/空变量传递给函数 Clojure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35107735/