如何定义返回列表中间元素的函数,假设有奇数个元素?
(all-but-last list)返回除列表的最后一个元素之外的所有元素; (中间列表)返回列表的中间元素
使用" cdr"和#34;所有但最后的"对于“中间”的定义。
答案 0 :(得分:1)
这可能是一个功课问题,希望您以递归方式解决问题。
您应该尝试区分递归的基本情况,以构建middle
的一般定义。此外,我们坚持这个问题,并假设输入列表中总是有奇数个元素。
首先,具有单个元素的列表的中间是什么?
然后,假设您有使用cdr
和all-but-last
作为基本结构,请尝试使用这些结构来定义一般情况下的问题。如何使用这些结构将问题减少为递归子问题?如何结合递归结果来产生结果?
例如,尝试使用下一个奇数大小的列表,一个包含3个元素的列表,并尝试查看如何使用基本构造和递归调用找到中间元素。
考虑一个包含元素 a,e0,e1,...,en,z 的列表。然后,此列表的中间部分与列表 e0,e1,...,en 的中间部分相同,即删除了第一个和最后一个元素的列表。
你可以从这样的事情开始,并填补空白:
(defun middle (list)
(if (endp (cdr list))
...
(middle ...)))