相关疑难解决方法(0)

重写apply函数以改为使用递归

学习口齿不清的最困难的部分可能就是以"优质的方式"进行思考,这种方式既优雅又令人印象深刻,但并不总是那么容易.我知道递归用于解决很多问题,我正在编写一本书,而不是apply用来解决很多问题,我理解这些问题并不像lispy那样,也不像便携式.

经验丰富的lisper应该能够帮助解决这个逻辑,而无需具体了解什么describe-path locationedges参考.这是我正在编写的一本书中的一个例子:

(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"?

lisp common-lisp

2
推荐指数
1
解决办法
293
查看次数

标签 统计

common-lisp ×1

lisp ×1