gpt4 book ai didi

Lisp:防止递归函数的双重调用

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

如何在不使用 set/setq/setf 的情况下防止对 (f (car l)) 的双重递归调用?

(defun f(l)
(cond
((null l) nil)
((listp (car l)) (append (f (car l)) (f (cdr l)) (car (f (car l)))))
(T (list (car l)))
)
)

您认为以下内容可以解决问题吗?

(defun f(l)
(cond
((null l) nil)
((listp (car l))
(funcall #'(lambda(ff) (append ff (f (cdr l)) (list (car ff)))) (f (car l))))
(T (list (car l)))
)
)

最佳答案

你的尝试没问题,但通常写成:

...
(bar (foo abcde))
...
(baz (foo abcde))
...

->

(let ((r (foo abcde)))
...
(bar r)
...
(baz r)
...)

另请注意:

(funcall #'(lambda (foo) ...) bar)

可以用 Common Lisp 写成:

((lambda (foo) ...) bar)

或首选,如前所述,如:

(let ((foo bar))
...)

关于Lisp:防止递归函数的双重调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37786292/

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