相关疑难解决方法(0)

Clojure:cons(seq)vs. conj(list)

我知道cons返回一个seq并conj返回一个集合.我也知道conj将项目"添加"到集合的最佳末端,并cons始终将项目"添加"到前面.这个例子说明了这两点:

user=> (conj [1 2 3] 4) //returns a collection
[1 2 3 4]
user=> (cons 4 [1 2 3]) //returns a seq
(4 1 2 3)
Run Code Online (Sandbox Code Playgroud)

对于矢量,地图和集合,这些差异对我来说很有意义.但是,对于列表,它们似乎相同.

user=> (conj (list 3 2 1) 4) //returns a list
(4 3 2 1)
user=> (cons 4 (list 3 2 1)) //returns a seq
(4 3 2 1)
Run Code Online (Sandbox Code Playgroud)

是否有任何使用列表的示例,其中conjvs cons表现出不同的行为,或者它们是否真的可以互换?换句话说,有一个例子,列表和seq不能等效使用吗?

collections clojure sequence

96
推荐指数
3
解决办法
2万
查看次数

在 Clojure 中循环/返回。什么是“尾巴”位置?

我只是在 REPL 上构建一个函数并遇到了这个问题。
我定义了一个符号 S 并给它一个值:

(def S '(FRUIT COLORS (YELLOW GREEN) SKIN (EDIBLE INEDIBLE)))
Run Code Online (Sandbox Code Playgroud)

我最终想要一个函数,它接受参数列表中的第一个条目以及任何和所有后续参数对,并将它们应用于第一个条目。我的编码从来没有那么远。我想使用循环/recur 构造(我应该这样做吗?),这是我在 REPL 中得到的程度:

(loop [KV# (rest S)]
    (if (empty? KV#)
        nil
        (
            (pprint S, (first KV#), (second KV#))
            (recur (rest (rest KV#)))
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

我得到一个“只能从尾部位置重复”编译器错误。
在 Stack Overflow 上到处找了包括 7 或 8 篇文章之后,我只能问:嗯?!
我是新手。如果 recur 不在尾部位置,有人可以向我解释为什么吗?
与'if'语句语法有关吗?啊!Clojure 不适合弱者!谢谢你。

clojure intellij-idea cursive

1
推荐指数
1
解决办法
108
查看次数

标签 统计

clojure ×2

collections ×1

cursive ×1

intellij-idea ×1

sequence ×1