2

したがって、私はScheme/Guileを使用するのが初めてで、2つの入力を取らなければならない割り当てがあります。単純な変数とリスト。

次に、リスト内の各数値に変数を追加して出力します。ロードする必要がありますが、これを入力すると:

(add 1 (1 2 3))

次のエラーが表示されます。

Backtrace:
  39: 0* [add 1 ...
  39: 1*  [1 2 3]

standard inout:39:8: In expression (1 2 3):
standard input:39:8:wrong type to appy: 1
ABORT: (misc-error)

ここに私が現在持っているコードがあります。

(define a (list a))
(define (add y a)
    (define x 0)
    (while (< x (length a))
        (display (+ y (car a)))
        (newline)
        (set! a (cdr a))
        (set! x (+ x 1))
    )
)

私の質問は次のとおり
です。パラメーターでリストを機能させるにはどうすればよいですか? 私はオンラインで見回しましたが、この問題を解決する方法はあまり見つかりませんでした。あなたが私に与えることができるどんな助けにも、前もって感謝します。

4

2 に答える 2

2

2 つの引数を指定して(1 2 3)関数を呼び出すように指示しているため、エラーが発生しています。1、2、3 を含むリストを作成するには、 を使用します。123(list 1 2 3)

于 2012-11-26T05:11:18.120 に答える
0

あなたは本当にそのような命令的な方法で手続きを書くつもりですか? それはSchemeのようには見えません。GNU Guile で手続きを評価すると、束縛されていない変数などに関する多くのエラー メッセージが表示されますset!。Scheme の初心者にとっては eval です ;) :) (SICP は第 3 章で代入を広範囲に扱います)。set!との副作用なしで、機能的なスタイルではるかに簡単に実行できますdisplay

マッピングと高階関数について既に認識している場合は、次のようにすることができます。

(define (add x)
  (lambda (y) (+ x y)))

(map (add 1) (list 1 2 3))
===> (2 3 4)

そうでない場合は、再帰プロシージャを自分で作成します。

(define (add-to-list x list)
  (if (null? list)
      '()
      (cons (+ x (car list))
            (add-to-list x (cdr list)))))

(add-to-list 1 '(1 2 3))
===> (2 3 4)

再帰的に考える方法を学ぶには、SICP、HTDP、「The litte Schemer」などの本を参照してください。

于 2012-11-26T12:32:28.457 に答える