【发布时间】:2018-09-30 17:00:05
【问题描述】:
我是 Common Lisp 的新手。最近开始学习它。我有一个小问题如何在另一个函数中调用一个函数?我有一个函数mrg 和函数my_eval。以及如何通过键入例如(print (my_eval '(mrg '(1 1 2 1 2 1 3) '(5 3 3 1 2 2)))) 在my_eval 中调用此函数mrg。我试过了,但我遇到了一些错误,例如 it's not a real number 或 undefined function A。请帮帮我。
这是我的代码:
(defun mrg (w v)
(merge 'list (sort w #'<) (sort v #'<) #'<))
(defun my_eval (A)
(cond
((atom A) A)
((equal 'car (car A))
(let ((A A)) (funcall (car A) (my_eval (cadr A)))))
((equal 'cdr (car A))
(let ((A A)) (funcall (car A) (my_eval (cadr A)))))
((equal 'atom (car A))
(let ((A A)) (funcall (car A) (my_eval (cadr A)))))
((equal 'cons (car A))
(let ((A A)) (funcall (car A) (my_eval (cadr A)) (my_eval (caddr A)))))
((equal 'list (car A))
(let ((A A)) (funcall (car A) (my_eval (cadr A)) (my_eval (caddr A)))))
((equal 'equal (car A))
(let ((A A)) (funcall (car A) (my_eval (cadr A)) (my_eval (caddr A)))))
((equal '* (car A))
(let ((A A)) (funcall (car A) (my_eval (cadr A)) (my_eval (caddr A)))))
((equal '/ (car A))
(let ((A A)) (funcall (car A) (my_eval (cadr A)) (my_eval (caddr A)))))
((equal '+ (car A))
(let ((A A)) (funcall (car A) (my_eval (cadr A)) (my_eval (caddr A)))))
((equal '- (car A))
(let ((A A)) (funcall (car A) (my_eval (cadr A)) (my_eval (caddr A)))))
((equal '= (car A))
(let ((A A)) (funcall (car A) (my_eval (cadr A)) (my_eval (caddr A)))))
((equal 'mrg ))
(T A)))
(print (my_eval '(mrg '(1 1 2 1 2 1 3) '(5 3 3 1 2 2))))
【问题讨论】:
-
A 的 let 绑定背后的意图是什么?
标签: function common-lisp eval