在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从行中创建列表是必须的,但是我对函数式编程是陌生的。
谢谢!
Lisp Koans由Maclisp程序员编写,早于Common Lisp的存在。在Maclisp中,APPLY只接受了两个参数,一个函数和一个参数列表。Common Lisp对此进行了概括,以允许使用您使用的语法。但是在Maclisp中,您必须调用CONS或LIST*显式调用。
| 归档时间: |
|
| 查看次数: |
33 次 |
| 最近记录: |