我需要帮助破译这个clojure密码
答案是:((0123)(23)) 有人能解释一下发生了什么事吗?我无法破译这个密码我需要帮助破译这个clojure密码,clojure,Clojure,答案是:((0123)(23)) 有人能解释一下发生了什么事吗?我无法破译这个密码 谢谢 Clojuremap可以在函数操作数之后获取多个seq,并为每个seq压缩一个元素。当第一个序列用完时,映射结束 在您的表单中,您给出了map两个seq:'(01)和'((01 2 3)(1 2 3)),这两个seq都有两个元素。因此,代码描述了两个drop调用: (map drop '(0 1) '((0 1 2 3) (1 2 3))) 希望这份文件有助于澄清这一点(我的重点): 返回由应用结果组成的
谢谢 Clojure
map
可以在函数操作数之后获取多个seq,并为每个seq压缩一个元素。当第一个序列用完时,映射结束
在您的表单中,您给出了map
两个seq:'(01)
和'((01 2 3)(1 2 3))
,这两个seq都有两个元素。因此,代码描述了两个drop
调用:
(map drop '(0 1) '((0 1 2 3) (1 2 3)))
希望这份文件有助于澄清这一点(我的重点):
返回由应用结果组成的延迟序列
将f应用于每个coll的第一个项目集,然后将f应用于
每个coll中的第二个项的集合,直到任何一个coll被删除为止
筋疲力尽的。忽略其他Coll中的任何剩余项。功能f应该接受colls参数的数量
请注意,Clojure的
map
是一个非常灵活的函数,因为它可以在您需要其他语言中的不同函数时执行多种操作
例如,它完成了这三个Haskell函数的所有功能:
clojure.core/map ([f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls])
在哪里
map :: (a -> b) -> [a] -> [b]
zip :: [a] -> [b] -> [(a, b)]
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
因此,在clojure中,您可以使用map
做两件不同的事情:
a) 将序列元素转换为相同长度的序列。在哈斯克尔和其他语言中,这就是所谓的“地图”
b) 将两个或多个序列压缩到一个元素中,得到与最短输入序列一样长的序列。这在Haskell中被称为“zipWith”
所提供的函数必须接受与输入序列一样多的参数,并返回应进入输出序列的元素
您给出的代码在其第二个函数中使用了map
。它从(0123)
中删除0
元素,从(1233)
中删除1
元素。结果是(0 1 2 3)
和(2 3)
进入结果序列。(仍在编写,意外发布)在这种情况下,您可以删除问题,编辑它,然后再次取消删除它。
map :: (a -> b) -> [a] -> [b]
zip :: [a] -> [b] -> [(a, b)]
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
zip = zipWith (,)