2017-03-04 16 views
-1

私はラケットとスキームが新しく、リストの組み合わせをリストの各組み合わせにして、次のように一緒に追加するようにしています:契約違反が予想されていますか?number? - スキーム

;The returned combinations 
((1 3) (2 3) (1 4) (2 4) (3 4) (1 5) (2 5) (3 5) (4 5) (1 6) (2 6) (3 6) (4 6) (5 6) (1 2) (2 2) (3 2) (4 2) (5 2) (6 2)) 

; expected results 
((2) (5) (5).....) 

は、残念ながら、私は、次のコードから契約違反期待されるエラーが発生します:

;list of numbers 
(define l(list 1 2 3 4 5 6 2)) 

(define (plus l) 
(+(car l)(cdr l))) 

(map (plus(combinations l 2))) 

答えて

2

あなたは(cadr l)をしたいです。

x(cons 1 (cons 2 '()))ある
(define (plus l) 
    (+ (car l) (cadr l))) 

:あなたのプラスの機能ではありません(cdr l)

(car x) => 1 
(cdr x) => (cons 2 '()) 
(cadr x) == (car (cdr x)) => 2 
+0

それを修正していただきありがとうございました、このような詳細な回答をありがとうございます。 – Racket

+0

@ coder-noobそれは本当にそれを修正しましたか?あなたのコードにはまだいくつかのバグがあります。私の答えを見てください。 –

3

あなたのコードとその他の問題がいくつかあり、エラー以外@DanDによって指摘。これは、それらを修正する必要があります

(define lst (list 1 2 3 4 5 6 2)) 

(define (plus lst) 
    (list (+ (car lst) (cadr lst)))) 

(map plus (combinations lst 2)) 
  1. それは私がそれを1だと思った一見、変数lを呼び出すためには良い考えではありません。 lstといいます(listではありません)。組み込みの手順です。
  2. 予想される出力では、リストのリストを作成するはずがありませんでしたか?あなたはmapはインデントし、コードをフォーマットする適切な方法に気づかください
  3. それを期待する方法でplusを渡していないplus
  4. listへの呼び出しを追加し、それが見つけたバグのお手伝いをします
関連する問題