将sqrt函数应用于lisp中的多个列表

时间:2013-11-16 15:27:39

标签: lisp common-lisp clisp

新手试图学习Lisp。我想将sqrt(或任何函数)应用于Clisp中的多个列表。例如。使用mapcar我们可以应用于一个列表,如     (mapcar#'sqrt(10 20 30))。

但是列表是什么情况呢((10 20)(30 40)(50))。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

尝试

? (mapcar (lambda (e) (mapcar #'sqrt e)) '((10 20) (30 40) (50)))
((3.1622777 4.472136) (5.477226 6.3245554) (7.071068))

对于任意深度,您可以使用递归函数:

(defun rmap (fun lst)
  (mapcar
   (lambda (x)
     (if (listp x)
       (rmap fun x)
       (funcall fun x)))
   lst))