2017-04-24 1 views
-2

Ich bin ein Problem in meine Hausaufgaben lispeln und ich gestoßen, die alle nachfolgenden Zahlen zu beseitigen fragt und nur die erste Nummer (1 1 2 1 3 1 1 1) in der Liste zum Beispiel sein wird, wird sein (1 2 1 3 1)alle nachfolgenden Zahlen in Lisp beseitigen

mein Code:

;the input is (1 1 2 1 3 1 1 1) 
(defun eli(x) 
    ; this condition will check if x is empty or has only one element 
    (if (or(null x)(null (cdr x))) x 
    ; if the first element is 1 but the second element is not 1 
    (if (and (= 1 (car x))(not (= 1 (car (cdr x))))) 
     ; if true then append 1 and call the function with the rest of the list 
     (cons (car x)(eli(cdr x))) 
     ; if false call the function recursivaly 
     (eli(cdr x)) 
    ))) 
     ; the output is (1 2 1 3 1 1) 

und dieser Code erzeugt (1 2 1 3 1 1)

eine Ahnung, wo ich falsch gemacht?

+0

Es ist unklar, für welchen Eingang welcher Ausgang generiert wird. Es ist auch unklar, was dein Code tun soll. Vielleicht möchten Sie Ihren Code kommentieren. –

+0

Ich habe meinen Code kommentiert, um klarer zu sein, beachten Sie, dass die tatsächliche Ausgabe '(1 2 1 3 1)' sein muss. Ich konnte es nicht bekommen –

+0

Bitte zeigen Sie uns, wo Lisp die Ausgabe für einige Eingabe produziert. Veröffentlichen Sie die aktuelle Lisp-Interaktion. Fügen Sie die Interaktion zu Ihrer Frage hinzu. –

Antwort

0

Ihr Problem ist dieses Prädikat:

(and (= 1 (car x))(not (= 1 (car (cdr x)))))) 

Diese prüft nur, wenn das erste Element 1 und das zweite ist nicht. Sie sollten lieber überprüfen, ob das erste Element numberp ist und dann, wenn die zwei ersten Elemente eql sind und dann das Element überspringen.

Verwandte Themen