2013-11-16 4 views
1

Новичок пытается узнать Lisp. Я хочу применить sqrt (или любую функцию) к нескольким спискам в Clisp. Напр. используя mapcar, мы можем применить к одному списку, например (mapcar # 'sqrt (10 20 30)).Применение sqrt функции для нескольких списков в clisp

Но как насчет случаев, когда списки ((10 20) (30 40) (50)). Заранее спасибо за помощь.

ответ

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)) 
+0

Спасибо за ответ. Есть ли другой способ сделать это, используя функцию apply? Благодарю. – kevin

+0

@kevin Вы можете заменить '(funcall fun x)' на '(применить fun x nil)' или '(применить fun (list x))'. – uselpa

Смежные вопросы