История изменений
Исправление saufesma, (текущая версия) :
Тут (append (find-vars …) (find-vars …)). find-vars возвращает список.
Да тут видно, что рекурсия, а вопрос остался открытым, я усложнил задачу, и как видно код отбрасывает все кроме "?"
CL-USER 3 > (find-vars '(s d ? c v))
(?)
CL-USER 4 > (find-vars '(1 2 3 4))
NIL
Попробовал посмотреть вот так
(defvar my-var)
(setq my-var nil)
(defun test-find-vars (expr)
"returns a list of all the variables in expr"
(if (consp expr)
(push (append (find-vars (car expr)) (find-vars (cdr expr))) my-var)
(progn
(if (is-var expr) (list expr) nil)
myvar)))
с таким выходом
CL-USER 9 > (test-find-vars '(1 2 3 4))
(NIL)
CL-USER 10 > (test-find-vars '(1 2 3 4 ?))
((?) NIL)
CL-USER 11 > (test-find-vars '(? 1 2 3 4 ?))
((? ?) (?) NIL)
CL-USER 12 > (test-find-vars '(? 1 2 ? 3 4 ?))
((? ? ?) (? ?) (?) NIL)
а как сюда внутрь заглянуть
(append (find-vars …) (find-vars …)).
Ткрзают меня смутные сомнения, а не посредством ли (find-vars (car expr)) is-var получает "?" ? Как?
(consp expr)
плучает (car expr)
передает его is-var
is-var проверяет и если это ? создаёт список
затем
(consp expr)
передается (cdr expr)
тогда append нужен чтобы кого-то обмануть?
(setq my-var nil)
Исправление saufesma, :
Тут (append (find-vars …) (find-vars …)). find-vars возвращает список.
Да тут видно, что рекурсия, а вопрос остался открытым, я усложнил задачу, и как видно код отбрасывает все кроме "?"
CL-USER 3 > (find-vars '(s d ? c v))
(?)
CL-USER 4 > (find-vars '(1 2 3 4))
NIL
Попробовал посмотреть вот так
(defvar my-var)
(setq my-var nil)
(defun test-find-vars (expr)
"returns a list of all the variables in expr"
(if (consp expr)
(push (append (find-vars (car expr)) (find-vars (cdr expr))) my-var)
(progn
(if (is-var expr) (list expr) nil)
myvar)))
с таким выходом
CL-USER 9 > (test-find-vars '(1 2 3 4))
(NIL)
CL-USER 10 > (test-find-vars '(1 2 3 4 ?))
((?) NIL)
CL-USER 11 > (test-find-vars '(? 1 2 3 4 ?))
((? ?) (?) NIL)
CL-USER 12 > (test-find-vars '(? 1 2 ? 3 4 ?))
((? ? ?) (? ?) (?) NIL)
а как сюда внутрь заглянуть
(append (find-vars …) (find-vars …)).
Ткрзают меня смутные сомнения, а не посредством ли (find-vars (car expr)) is-var получает "?" ? Как?
(consp expr)
плучает (car expr)
передает его is-var
is-var проверяет и если это ? создаёт список
затем
(consp expr)
передается (cdr expr)
(setq my-var nil)
Исправление saufesma, :
Тут (append (find-vars …) (find-vars …)). find-vars возвращает список.
Да тут видно, что рекурсия, а вопрос остался открытым, я усложнил задачу, и как видно код отбрасывает все кроме "?"
CL-USER 3 > (find-vars '(s d ? c v))
(?)
CL-USER 4 > (find-vars '(1 2 3 4))
NIL
Попробовал посмотреть вот так
(defvar my-var)
(setq my-var nil)
(defun test-find-vars (expr)
"returns a list of all the variables in expr"
(if (consp expr)
(push (append (find-vars (car expr)) (find-vars (cdr expr))) my-var)
(progn
(if (is-var expr) (list expr) nil)
myvar)))
с таким выходом
CL-USER 9 > (test-find-vars '(1 2 3 4))
(NIL)
CL-USER 10 > (test-find-vars '(1 2 3 4 ?))
((?) NIL)
CL-USER 11 > (test-find-vars '(? 1 2 3 4 ?))
((? ?) (?) NIL)
CL-USER 12 > (test-find-vars '(? 1 2 ? 3 4 ?))
((? ? ?) (? ?) (?) NIL)
а как сюда внутрь заглянуть
(append (find-vars …) (find-vars …)).
Ткрзают меня смутные сомнения, а не посредством ли (find-vars (car expr)) is-var получает "?" ? Как?
Исправление saufesma, :
Тут (append (find-vars …) (find-vars …)). find-vars возвращает список.
Да тут видно, что рекурсия, а вопрос остался открытым, я усложнил задачу, и как видно код отбрасывает все кроме "?"
CL-USER 3 > (find-vars '(s d ? c v))
(?)
CL-USER 4 > (find-vars '(1 2 3 4))
NIL
Попробовал посмотреть вот так
(defvar my-var)
(setq my-var nil)
(defun test-find-vars (expr)
"returns a list of all the variables in expr"
(if (consp expr)
(push (append (find-vars (car expr)) (find-vars (cdr expr))) my-var)
(progn
(if (is-var expr) (list expr) nil)
myvar)))
с таким выходом
CL-USER 9 > (test-find-vars '(1 2 3 4))
(NIL)
CL-USER 10 > (test-find-vars '(1 2 3 4 ?))
((?) NIL)
CL-USER 11 > (test-find-vars '(? 1 2 3 4 ?))
((? ?) (?) NIL)
CL-USER 12 > (test-find-vars '(? 1 2 ? 3 4 ?))
((? ? ?) (? ?) (?) NIL)
а как сюда внутрь заглянуть
(append (find-vars …) (find-vars …)).
Исходная версия saufesma, :
Тут (append (find-vars …) (find-vars …)). find-vars возвращает список.
Да тут видно, что рекурсия, а вопрос остался открытым, я усложнил задачу, и как видно код отбрасывает все кроме "?"
CL-USER 3 > (find-vars '(s d ? c v))
(?)
CL-USER 4 > (find-vars '(1 2 3 4))
NIL
Попробовал посмотреть вот так
(defvar my-var)
(setq my-var nil)
(defun test-find-vars (expr)
"returns a list of all the variables in expr"
(if (consp expr)
(push (append (find-vars (car expr)) (find-vars (cdr expr))) my-var)
(progn
(if (is-var expr) (list expr) nil)
myvar)))
с таким выходом
CL-USER 9 > (test-find-vars '(1 2 3 4))
(NIL)
CL-USER 10 > (test-find-vars '(1 2 3 4 ?))
((?) NIL)
CL-USER 11 > (test-find-vars '(? 1 2 3 4 ?))
((? ?) (?) NIL)
CL-USER 12 > (test-find-vars '(? 1 2 ? 3 4 ?))
((? ? ?) (? ?) (?) NIL)
а как сюда внутрь заглянуть
(append (find-vars …) (find-vars …)).