clojure - 将抽象/空变量传递给函数 Clojure

标签 clojure lisp clojurescript clojure-java-interop

我有一个函数,我需要输入一个单词,我试图让一个变量 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/

相关文章:

lisp - 如何在 lisp 中计算两次(不使用 eval)

javascript - 为什么我不能将 Clojurescript 函数作为回调传递给 Javascript?

error-handling - 有没有更好的方法来捕获clojurescript中的javascript错误?

ClojureScript 循环依赖

java - 在 clojure 中使用 java 结构

ssh - Clojure - 如何远程连接到正在运行的 REPL 进程

recursion - Clojure 中的递归斐波那契函数

arrays - 如何拥有两个相等但内部状态不同的数组

lisp - 使用 cl-who、parenscript 和 hunchentoot 生成内联 javascript

clojure - 在当前 .jar 文件中获取 Clojure 命名空间