LINUX.ORG.RU

История изменений

Исправление 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 …)).
как is-var передаётся список с "?" ?

Ткрзают меня смутные сомнения, а не посредством ли (find-vars (car expr)) is-var получает "?" ? Как?

(consp expr)
плучает (car expr)
передает его is-var
is-var проверяет и если это ? создаёт список

затем 
(consp expr)
передается (cdr expr)

тогда append нужен чтобы кого-то обмануть?
теперь было-бы неплохо объяснить почему в my-var nil, или это моё nil
(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 …)).
как is-var передаётся список с "?" ?

Ткрзают меня смутные сомнения, а не посредством ли (find-vars (car expr)) is-var получает "?" ? Как?

(consp expr)
плучает (car expr)
передает его is-var
is-var проверяет и если это ? создаёт список

затем 
(consp expr)
передается (cdr expr)
теперь было-бы неплохо объяснить почему в my-var nil, или это моё nil
(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 …)).
как is-var передаётся список с "?" ?

Ткрзают меня смутные сомнения, а не посредством ли (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 …)).
как 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 …)).
как is-var передаётся "?" ?