gpt4 book ai didi

common-lisp - 以两种方式展平列表: (i) using MAPCAN and (ii) using LOOP

转载 作者:行者123 更新时间:2023-12-04 06:46:37 24 4
gpt4 key购买 nike

我的教授在 clisp 中给了我们一个复习作业。一个练习是通过三种方式实现相同的目标: 返回给定列表中所有正整数的扁平列表。

现在,我真的很喜欢这样做的一种方式,使用 cons 和递归,但他希望我使用 mapcan 和循环来做到这一点(我怀疑 lisp 不是他的首选语言,因为这种编码风格对lisp 的性质)。我很难弄清楚如何使用循环来做到这一点......我想我需要先开始一个列表?

我为含糊的语言道歉,因为我不确定如何谈论使用函数式语言进行程序编写。以下是我的第一次尝试。

(defun posint-loop (l)  
(loop for i in l
do (if (listp i)
(posint-loop i)
(if (integerp i)
(if (> i 0)
(append i) ; this doesn't work because there's nothing to
; start appending to!
nil)
nil))))

最佳答案

为了建立一个新的词法绑定(bind),使用 let with loop 的关键字.为了扩展现有列表,您可能需要使用 push ;如需原单,可 nreverse 新名单 finally .

另一种方法是使用 when collect loop 的关键词.

另一个提示: mapcan 隐式创建一个新列表。

关于common-lisp - 以两种方式展平列表: (i) using MAPCAN and (ii) using LOOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3679219/

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