gpt4 book ai didi

functional-programming - 将一个函数分成多行

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:49 24 4
gpt4 key购买 nike

这里有一些来自神奇的书“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 函数分成多行吗?

最佳答案

行在 Lisp 中是没有意义的。 Lisp 表示法基于 s 表达式,在计算期间 Lisp 看不到文本行。您可以在空白处以任何方式拆分表达式。​​

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

你必须像这样阅读代码:

  • 每对边都是一个cons列表。每个 cons 存储一个位置。
  • 循环返回边对列表。
  • 然后将追加应用于此列表并返回一个conses列表。缺点列表实际上是位置列表。

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

  • APPLY 不适用于任意长度的列表。所以希望这个列表不会太长。

  • 更重要的是,如果我们稍微改变一下 LOOP,就不需要应用 APPEND 函数。 LOOP不仅可以COLLECT,还可以APPEND。

关于functional-programming - 将一个函数分成多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4210867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com