теперь у меня есть список:
(+ x (- 4 9))
Сначала мне нужно (- 4 9) поменять на (- (4,0) (9,0)) (пожалуйста, переживайте эту часть слишком сильно)
(defun typecheck (A)
(cond
((numberp A)
(cons A 0))
((equal A 'x)
(cons 1 1))
(t A)))
тогда мне нужно вычесть (4,0) и (9,0) (но это не моя проблема, я не хочу публиковать эту функцию, потому что она слишком длинная ...
таким образом, оно становится
(+ x (-5 . 0))
, теперь на этот раз я изменяю x на (1. 1), поэтому список становится (+ (1. 1) (- 5. 0)) я, наконец,сложите их вместе (окончательный результат (-4. 1))
Моя главная проблема заключается в том, чтобы дать понять Лиспу, что я хочу сначала вычислить их после того, как получу (- (4. 0) (9 .0))? Моя функция просто сразу перейдет к (+ (1. 1) ((- 4 .0) (9. 0)) и выдала мне сообщение об ошибке.
Мой процесс:
(defun check (A)
(cond
((atom A)
(let ((newA (typecheck A)))
(calucalte A)))
((listp A)
(mapcar #'check A))
но эта функция ничего не будет хранить ... и я не знаю, как это сделать :( Кто-нибудь может мне помочь? СПАСИБО.