2016-03-25 24 views
0

Lisp'e yeni. Yinelemeli bir fonksiyona bir liste aktarmaya çalışmak ve her seferinde listedeki ilk öğe ile bir şeyler yapmak. Bu şimdiye kadar fonksiyonudur:eLisp özyinelem işlevi

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

Tut x söyleyerek bir hata alıyorum bir boşluk unsurdur. Ne yapacağından emin değilim. Ben senin fonksiyonunu yeniden biçimlendirmek ise

+3

Lütfen biçimlendirmenizi düzeltin, artık neyiniz okunamıyor. lütfen de kopyalayın ve hata mesajını yapıştırın. – sds

cevap

4

, belki yanlış yaptığınızı görebilirsiniz:

(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 

x boşluk elemanı olduğunu söyleyerek bir hata alıyorum tutun.

Sana (my-function colors) ile Elinden colors liste geçirmeden yerine tanımlanmamış x ile (my-function x) aradığınız hayal, ama bu kesinlikle tek sorun bu değil.