将函数分成多行
以下是一本惊人的书“Land of Lisp”中的一个例子的源代码:
(defun random-node ()
(1+ (random *node-num*)))
(defun edge-pair (a b)
(unless (eql a b)
(list (cons a b) (cons b a))))
(defun make-edge-list ()
(apply #'append (loop repeat *edge-num*
collect (edge-pair (random-node) (random-node)))))
由于我没有Lisp本能,我发现将方法分解为多行(作为命令式样式)然后尝试将其转换为功能样式是有用的。
你能帮我把make-edge-list功能分成多行吗?
没有找到相关结果
已邀请:
1 个回复
际恃啸称桅
你必须阅读这样的代码: 每个边对都是一个圆锥列表。每个缺点都存储一个位置。 循环返回边对的列表。 然后将append应用于此列表并返回一个conses列表。圆锥列表实际上是一个位置列表。 请注意,该功能有几个小问题: APPLY不适用于任意长度的列表。所以我们希望列表不会太长。 更重要的是,如果我们稍微改变LOOP,则不需要应用APPEND功能。 LOOP不仅可以收集,还可以APPEND。