我有一个函数,我需要接受一个单词,我试图使变量x为单词变量的排序版本。我不知道我是怎么做的...我试图将其作为函数的参数传递但不起作用。
如何传入“单词”并使函数内的变量等于“单词”的排序版本,因此我有两个副本,原始单词和单词的x版本。所以我可以继续传递到我需要创建的地图。
(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)
答案 0 :(得分:0)
这个表达式对你没有任何作用:
(for [wordset '("one" "two" "three" "FouR" "wot" "Rheet" "nope" "#")]
(transform2 wordset))
您不会将此位置放置在将使用返回值的任何位置。 for
不像其他语言中的循环命令。它只是创建一个序列并返回它,它不会修改任何东西。
一般来说,你应该使用向量和首选关键字:
[:one :two :three :whatever]
虽然这会改变你正在做的事情的语义,所以也许你有来自其他地方的字符串需要使用它们?否则,请不要将自己使用字符串作为标识符:这是关键字的用途。
至于你的其他问题,你的意思并不十分清楚。你说你想做一个变量,但是你不清楚这是什么意思,因为你所拥有的代码并没有按照这些方式做任何事情。
答案 1 :(得分:0)
您的transform2接受两个参数,但您只传递一个参数。尝试删除x参数,如下所示。此外,您可能希望颠倒创建函数的顺序,因为它们需要在使用之前进行定义。 (您也可以使用declare。)
(defn sort-string [s]
(apply str (sort s)))
(defn transform2 [word]
(let [x (sort-string (clojure.string/lower-case word))]
(prn x)))
(for [wordset '("one" "two" "three" "FouR" "wot" "Rheet" "nope" "#")]
(transform2 wordset))
结果将是:
"eno"
"otw"
"eehrt"
"foru"
"otw"
"eehrt"
"enop"
"#"