代码之家  ›  专栏  ›  技术社区  ›  Chiron

将函数拆分为多行

  •  2
  • Chiron  · 技术社区  · 15 年前

    (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函数分解成多行吗?

    1 回复  |  直到 11 年前
        1
  •  1
  •   Rainer Joswig mmmmmm    15 年前

    在Lisp中,行是没有意义的。Lisp表示法基于s表达式,在求值期间Lisp看不到文本行。您可以在空格上以任何方式分解表达式。

    (defun make-edge-list ()
       (apply #'append
              (loop repeat *edge-num*
                    collect (edge-pair (random-node)
                                        (random-node)))))
    

    你必须这样读代码:

    • 然后将append应用于该列表并返回conse列表。军士名单实际上是一份职位清单。

    请注意,该函数有几个小问题:

    • APPLY不适用于任意长度的列表。所以让我们希望名单不要太长。

    推荐文章