【发布时间】:2016-03-06 02:14:14
【问题描述】:
我的任务是创建一个程序,在其中我需要一个函数来返回一个排序列表(按字母顺序)。但是,我无法使用“非功能性”功能,例如“set,setq”等......其中包括内置的排序功能(因为它具有破坏性)。所以,我想知道是否有办法在 lisp 中构建非破坏性排序?
【问题讨论】:
-
这是作业吗?否则,这种限制听起来像是纯粹的煽动。不,您在 Common Lisp 中没有非破坏性排序。务实一点,只需创建一个复制序列的函数,在副本上运行
sort并返回sort的结果。然后,您可以假设或假装这个新功能是非破坏性的。不要误会我的意思,我喜欢纯函数式代码,只要它与非函数式方法一样快,并且它不会强迫我跳过障碍。如果你被催促跳转,你必须自己实现一个函数排序。 -
我认为普通 lisp 的典型做法是对列表的新副本使用破坏性排序。这满足了“功能性”api,因为调用者无法观察任何副作用,并且相同的输入总是得到相同的输出。