0

こんにちは、mcar: contract violationexpected: mpair? というエラーが表示されました。given: () これらのコードの実行中:

(define helpy 
  (lambda (y listz)
    (map (lambda (z) (list y z))
         listz)))

(define print
  (lambda (listy)
    (cond
      ((null? list) (newline))
      (#t (helpy (car listy) (cdr listy))
          (print (cdr listy))))))

私のコードはリストでペアを返そうとしています。たとえば、呼び出す (print '(a b c))と、 が返され((a b) (a c) (b c))ます。

コードを修正して更新するだけで、エラーは返されなくなりましたが、これらのコードを実行すると、ペア ( (ab) (ac) しか取得できません。

(helpy を定義する

(ラムダ (y listz)

(マップ (ラムダ (z) (リスト yz))

リスト z)))

(印刷を定義する

(ラムダ (listy)

(状態

((null? listy) (改行))

(#t (helpy (car listy) (cdr listy)))

(print (cdr listy)))))

再帰に何か問題があると思います

4

2 に答える 2

0

コードにはいくつかの問題があります。まず、慣例により、 a の「else」句はではなく でcond開始する必要があります。次に、 のテストはではなくを受け取る必要があります。そして 3 番目に、 inによって返された結果で何もしていません。再帰呼び出しによって返された値で何もせずに、現在のリストを進めているだけです。代わりにこれを試してください:else#tnull?printlistylisthelpyprintprintcdr

(define print
  (lambda (listy)
    (cond
      ((null? listy) (newline))
      (else
       (displayln (helpy (car listy) (cdr listy)))
       (print (cdr listy))))))

displaylnは単なる例です。必要に応じて、返された結果で別のことを行います。

于 2012-11-18T21:59:01.140 に答える