学习口齿不清的最困难的部分可能就是以"优质的方式"进行思考,这种方式既优雅又令人印象深刻,但并不总是那么容易.我知道递归用于解决很多问题,我正在编写一本书,而不是apply用来解决很多问题,我理解这些问题并不像lispy那样,也不像便携式.
经验丰富的lisper应该能够帮助解决这个逻辑,而无需具体了解什么describe-path location和edges参考.这是我正在编写的一本书中的一个例子:
(defun describe-paths (location edges)
(apply (function append) (mapcar #'describe-path
(cdr (assoc location edges)))))
Run Code Online (Sandbox Code Playgroud)
我已经成功地重写了这个以避免apply和使用递归.它似乎工作:
(defun describe-paths-recursive (location edges)
(labels ((processx-edge (edge)
(if (null edge)
nil
(append (describe-path (first edge))
(processx-edge (rest edge))))))
(processx-edge (cdr (assoc location edges)))))
Run Code Online (Sandbox Code Playgroud)
我想要一些更加经验丰富的眼睛来建议是否有一种更优雅的方式来转换apply为递归,或者如果我做了一些不明智的事情.这段代码看起来不错,但是会不会有更多的"lispy"?