(defun describe-paths (location edges)
(apply #'append (mapcar #'describe-path (cdr (assoc location edges)))))
答案 0 :(得分:11)
有什么相似之处?或者,这里潜伏着另一个问题吗?
(来自elisp的链接,因为这是我所知道的。引号只是摘录,链接包含可能与特定“Lisp”相关或不相关的示例。)
mapcar是一个函数,它依次用第二个参数的每个元素调用它的第一个参数。第二个参数必须是序列。
使用参数应用调用函数,只需就像funcall但有一点不同:最后一个参数是一个对象列表,它们作为单独的参数传递给函数,而不是单个列表。我们说apply会传播这个列表,以便每个元素成为一个参数。
快乐的编码。
答案 1 :(得分:4)
describe-paths
函数(来自Land of Lisp中的基于文本的冒险游戏!)生成对来自给定位置的路径的描述。 Lisp的土地中的页面74-77解释了示例中mapcar
和append
的角色。
(cdr (assoc location edges))
提供了从该位置开始的所有路径的列表,例如living-room
位置的路径:
((GARDEN WEST DOOR)
(ATTIC UPSTAIRS LADDER))
mapcar
为每个路径调用函数describe-path
,将路径描述收集到列表中,其中每个子列表都是路径描述:
((THERE IS A DOOR GOING WEST FROM HERE.)
(THERE IS A LADDER GOING UPSTAIRS FROM HERE.))
接下来,append
函数将应用于路径描述列表,并将其连接到一个平面列表中:
(THERE IS A DOOR GOING WEST FROM HERE. THERE IS A
LADDER GOING UPSTAIRS FROM HERE.)