2017-06-22 18 views
0

リストからペアのリストを作成したいのですが、cdrは常に同じです。たとえば、(make-pair '(1 2 3 4 5))'((1.a)(2.a)(3.a)(4.a)(5.a))を返します。ラケット。リストからペアのリストを作成する

これは私が開発しているコードですが、うまくいかず、デバッグ方法がわかりません。

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

ありがとうございます!

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

これが正しい方法である:より良い

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

あるいは、使用ビルトイン手順:

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

いずれかの方法で

答えて

0

あなたは、エラーのカップルを持っています期待どおりに動作します。

(make-pair '(1 2 3 4 5)) 
=> '((1 . a) (2 . a) (3 . a) (4 . a) (5 . a)) 
関連する問題