内部使用`cons`适用于mapcar

gmo*_*oss 2 common-lisp

在Lisp Koans中,此处使用以下形式来转置矩阵:

(defun transpose (L) (apply #'mapcar (cons #'list L)))

当我解析此函数时,(cons #'list L)返回一个列表'(#'list L1 L2 L3 ...)L_i矩阵的列在哪里L。然后apply展开该列表,现在mapcar list将as的列作为其参数L,从而构造的行L

我想知道是否有任何原因,除了强迫一个新的Lisp学生记住并理解的用法的教学论之外cons,还不只是写

(defun transpose (L) (apply #'mapcar #'list L))

因为L已经是一个列表(以列(作为列表)),所以在拆包之前,这些列表apply#'list位于列表中L

可以再简化一下吗?我认为apply,为了将参数解包以便用于mapcar从行中创建列表是必须的,但是我对函数式编程是陌生的。

谢谢!

Bar*_*mar 7

Lisp Koans由Maclisp程序员编写,早于Common Lisp的存在。在Maclisp中,APPLY只接受了两个参数,一个函数和一个参数列表。Common Lisp对此进行了概括,以允许使用您使用的语法。但是在Maclisp中,您必须调用CONSLIST*显式调用。