2016-03-25 7 views
0

Новинка на Lisp. Попытка передать список в рекурсивную функцию и сделать что-то с первым элементом в списке каждый раз. Это функция до сих пор:eLisp рекурсивная функция

(setq colors '(red blue green yellow orange pink purple)) 

(defun my-function (x) 
    (if (> (length x) 0) 
     (let ((c (car x)) 
      c) 
     (my-function x)))) 

Продолжайте получать сообщение об ошибке, когда x является элементом пустоты. Не уверен, что делать.

+3

исправьте свое форматирование, то, что у вас сейчас, не читается. пожалуйста, скопируйте и вставьте сообщение об ошибке. – sds

ответ

4

Если я переформатировать функцию, может быть, вы можете увидеть, что вы делаете неправильно:

(defun my-function (x) 
    (if (> (length x) 0) ; do nothing if list is empty 
     (let ((c (car x)) ; bind c to (car x) 
      c)   ; bind c to nil instead 
         ; c is never used 
     (my-function x)))) ; recursively call function 
          ; with unmodified x 
          ; until the stack is blown 

Держите получаю ошибку о том, х является недействительным элемент.

Я полагаю, что вы звоните (my-function x) с неопределенным x вместо того, чтобы передать ему свой colors список с (my-function colors), но это, конечно, не единственная проблема.

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