clojure - 在 clojure 中打印符号列表

标签 clojure lisp

我试图打印出一个符号列表,我想知道我是否 可以删除引号。

(def process-print-list
  (fn [a-list]
  (cond (empty? a-list) 'false
  (list? a-list) (let [a a-list] (println (first a)) (process-print-
list (rest a) ))
  :else (process-print-list (rest a-list) ))))

列表是 ('x 'y 'z))

输出如下:

(quote x)
(quote y)
(quote z) 

我只是想让它打印出来:

x
y
z

最佳答案

('x 'y 'z)((quote x) (quote y) (quote z)) 的语法缩写。如果你真的想要一个符号列表(即 (x y z)),你可能在某处引用了太多。

'(x y z)          ;=> (x y z)
'('x 'y 'z)       ;=> ((quote x) (quote y) (quote z))
(list 'x 'y 'z)   ;=> (x y z)

通常,除非您知道自己在做什么,否则不要使用引号来构建列表。请改用 list 构造函数。

另一方面,在这里我会选择迭代而不是递归。这很好用:

(doseq [sym some-list]
  (println sym))

关于clojure - 在 clojure 中打印符号列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4460082/

相关文章:

functional-programming - 方案函数的位置独立参数

lisp - 为什么 llvm 上没有好的方案/lisp?

emacs - 在 emacs lisp 中对 `nil` 进行操作

java - 包括 clojure 中的 jar

java - 如果从生成的代码分支,二进制搜索比硬编码慢?

parsing - 如何在 Clojure 中懒惰地解析大 XHTML 文件?

clojure - :fin being used? 怎么样

lisp - 将字符串转换为 Scheme 中的代码

Clojure 不需要 cljc 文件

function - 扩展 defmethod 语句的 eql 子句以接受任何函数?