gpt4 book ai didi

common-lisp - 使用递归的列表的最大值?

转载 作者:行者123 更新时间:2023-12-03 03:46:23 25 4
gpt4 key购买 nike

我的任务是在 lisp 中编写函数,通过使用递归找到作为函数参数给出的列表的最大值。我已经尝试过,但有一些错误。我是 Lisp 的新手,我正在使用 cusp 插件对于 Eclipse。这是我的代码:

(defun maximum (l)
(if (eq((length l) 1)) (car l)
(if (> (car l) (max(cdr l)))
(car l)
(max (cdr l))
))

最佳答案

如果这不是一个家庭作业问题,你应该更喜欢这样的问题:

(defun maximum (list)
(loop for element in list maximizing element))

或者甚至:

(defun maximum (list)
(reduce #'max list))

(不过,对于空列表,两者的行为有所不同)

如果您确实需要递归解决方案,您应该尝试使您的函数更高效,和/或尾递归。看看 Diego 和 Vatine 的答案,以获得更惯用和更高效的递归实现。

现在,关于您的代码:

这在“Lisp 方面”是非常错误的,即使你似乎知道如何解决手头的问题。我怀疑您是否花了很多时间来学习 Lisp 基础知识。括号搞乱了——缺少右括号,在 ((length l) 1) 中,您应该注意到计算列表中的第一个元素将用作运算符。另外,您并没有真正递归,因为您正在尝试调用 max (而不是 maximize)。最后,不要使用#'eq进行数字比较。此外,如果您以传统方式格式化和缩进代码,您的代码将更具可读性(不仅对其他人而言)。

你真的应该考虑花一些时间学习基本的 Lisp 教程,因为你的问题清楚地表明你甚至缺乏对 Lisp 最基本的东西的理解,比如评估规则。

关于common-lisp - 使用递归的列表的最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047403/

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