2016-04-26 6 views
-1

Lets sagen, dass ich eine Liste mit Argumenten haben, wie kann ich es ohne Klammern, zB an:Racket Wie entferne ich Klammern und Apostroph aus Listen?

(definieren lst (Liste 1 2 3)) (Anzeige lst)

-> (1 2 3

)

aber ich will es scheinen, als: 1 2 3

Mein Versuch:

(define (clean-list lst) 
    (if 
    (null? lst) (display (null)) 
    (display (car lst))) 
    (display #\space) 
    (clean-list (cdr lst))) 

es die ohne Klammern die Liste zurückgibt, aber mit einer Fehlermeldung ... Wer könnte mir dabei helfen? Beachten Sie auch, dass ich neu bei Racket und Racket meine erste Programmiersprache bin. Schätze alle Antworten!

Antwort

3

Der Fehler wird durch die Tatsache verursacht, dass Sie immer die Funktion rekursiv aufrufen, nach if, auch wenn die Liste null ist.

Hier ist eine korrekte Version:

(define (clean-list lst) 
    (when (cons? lst) 
    (display (car lst)) 
    (display #\space) 
    (clean-list (cdr lst)))) 

Beachten Sie, dass diese Funktion druckt nur die Elemente auf der ersten Ebene der Liste ohne Klammern, aber wenn ein Element ist eine Liste mit Klammern gedruckt wird.

+0

Schöne Verwendung von 'wenn'. Ich habe es nicht oft benutzt und ich mag es hier sehr. – naomik

Verwandte Themen