gpt4 book ai didi

emacs - Lisp 中 while/break 的函数式编程替代方案

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

有一个字符串列表。这个想法是编写一个函数来迭代字符串列表,如果找到匹配项,则返回字符串名称,否则返回 nil。这可以写成语言作为

string match-string(tmp)
{
for (int i = 0; i < stringList.size(); ++i)
{
if (tmp == stringList.at(i))
return tmp;
}
return string(); // null string
}

但是in this post提到在 Lisp 和 there must be a functional way 中通常不使用循环.执行此操作的实用方法是什么?

最佳答案

在 Lisp 中绝对使用循环。循环在不保证消除尾调用的 Lisp 中更具吸引力,例如 Emacs Lisp 和 Common Lisp。

如果您坚持按功能编写,您可以这样做。它可能看起来像这样:

(defun find-string (string list)
(if (null list)
nil
(if (equal string (car list))
(car list)
(find-string string (cdr list)))))

但是在 Emacs Lisp 中,这段代码不会从尾调用消除中受益,并且可能运行缓慢或炸毁堆栈。最好只使用循环:

(defun find-string (string list)
(loop for s in list
when (equal s string) return s))

关于emacs - Lisp 中 while/break 的函数式编程替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658640/

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