2017-06-22 9 views
0

Ich möchte eine Liste von Paaren ausgehend von einer Liste machen, die Cdr wird immer gleich sein. Zum Beispiel sollte (make-pair '(1 2 3 4 5))'((1.a)(2.a)(3.a)(4.a)(5.a)) zurückgeben.Schläger. Machen Sie eine Liste von Paaren aus einer Liste

Dies ist der Code, den ich entwickle, aber es funktioniert nicht und ich weiß nicht, wie man es debuggt.

(define (make-pair lst) 
(if (null? (car lst)) 
     '() 
     (cons ((car lst) ".a") 
      (make-pair (cdr lst))))) 

Vielen Dank im Voraus!

Antwort

0

Sie haben ein paar Fehler:

(define (make-pair lst) 
    (if (null? (car lst))  ; - the base case is when the list is null 
     '() 
     (cons ((car lst) ".a") ; - there's a missing cons 
          ; - `a` appears to be a symbol, not a string 
          ; - that's not how we create a dotted pair 
          ; - the surrounding `()` are misplaced 
      (make-pair (cdr lst))))) 

Dies ist der richtige Weg:

(define (make-pair lst) 
    (if (null? lst) 
     '() 
     (cons (cons (car lst) 'a) 
      (make-pair (cdr lst))))) 

Oder noch besser, verwenden eingebaute Prozeduren:

(define (make-pair lst) 
    (map (lambda (n) (cons n 'a)) 
     lst)) 

In beiden Fällen funktioniert es wie erwartet:

(make-pair '(1 2 3 4 5)) 
=> '((1 . a) (2 . a) (3 . a) (4 . a) (5 . a)) 
Verwandte Themen