我需要帮助解密这个clojure代码

iye*_*and 4 clojure

(map drop '(0 1) '((0 1 2 3) (1 2 3)))
Run Code Online (Sandbox Code Playgroud)

答案是:((0 1 2 3)(2 3))

有人可以解释一下发生了什么吗?我无法破译这段代码?!

谢谢!

unp*_*680 9

Clojure map可以在函数操作数之后获取多个seq,并为每个seq拉出一个元素.当第一个seq用尽时,地图结束.

在您的表单中,您提供map两个seq:'(0 1)并且'((0 1 2 3) (1 2 3))它们都有两个元素.因此代码描述了两个drop调用:

(drop 0 '(0 1 2 3)) ; => '(0 1 2 3)
(drop 1 '(1 2 3))   ; => '(2 3)
Run Code Online (Sandbox Code Playgroud)

希望这个文档有助于清除这一点(强调我的):

clojure.core/map ([f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls])
Run Code Online (Sandbox Code Playgroud)

返回一个惰性序列,包括将f应用于每个coll的第一项集合的结果,然后将f应用于每个coll中的第二项集合,直到任何一个colls都用完为止.其他colls中的任何剩余项都将被忽略.函数
f应该接受colls of colls参数.