(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)))))
口齿不清的本能 ,我发现将一个方法分成多行(作为命令式样式),然后尝试将其变形为函数式样式是很有用的。
你能帮我把makeedge list函数分解成多行吗?
在Lisp中,行是没有意义的。Lisp表示法基于s表达式,在求值期间Lisp看不到文本行。您可以在空格上以任何方式分解表达式。
(defun make-edge-list () (apply #'append (loop repeat *edge-num* Â Â Â Â Â Â Â Â collect (edge-pair (random-node) (random-node)))))
你必须这样读代码:
请注意,该函数有几个小问题:
APPLY不适用于任意长度的列表。所以让我们希望名单不要太长。