2016-03-25 14 views
0

Neu bei Lisp. Versuchen Sie, eine Liste in eine rekursive Funktion zu überführen und jedes Mal etwas mit dem ersten Element in der Liste zu tun. Das ist die Funktion so weit:eLisp rekursive Funktion

(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)))) 

Erhalten Sie immer einen Fehler, der besagt, dass x ein leeres Element ist. Nicht sicher, was zu tun ist.

+3

Bitte korrigieren Sie Ihre Formatierung, was Sie jetzt haben, ist nicht lesbar. Bitte kopieren Sie auch die Fehlermeldung und fügen Sie sie ein. – sds

Antwort

4

Wenn ich Ihre Funktion umformatieren, vielleicht können Sie sehen, was Sie tun, ist falsch:

(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 

Halten Sie einen Fehler immer sagen, x eine Lücke Element ist.

ich denke, Sie (my-function x) mit einem undefinierten x sind aufrufen, anstatt sie Ihre colors Liste mit (my-function colors) zugeben, aber das ist sicherlich nicht das einzige Problem.