3

スキームのさまざまなパラメーター受け渡しモードを理解するのを手伝ってくれる人はいますか? 私はSchemeが値渡しのパラメータを実装していることを知っています。しかし、他のモードはどうですか?

スキームでパラメータを渡すための適切なドキュメントはありますか?

4

2 に答える 2

7

スキームには、値渡し関数呼び出しのみがあります。言語内で実装できる代替手段は他にもありますが、初心者の場合は、この時点でそれらを試さないことをお勧めします。「参照によって」値を渡す方法を探している場合、それを実現できる1つのオプションはマクロを使用することですが、実際にはそこに行くべきではありません。代わりに、PLT スキームなどの一部のスキーム実装は「ボックス値」を提供します。これは、次のように使用される一種のコンテナです。

  • <something>で保持するボックスを作成します(box <something>)
  • ボックスに格納されている値を取得します(unbox <some-box>)
  • ボックスに格納されている値を次のように変更します。(set-box! <some-box> <new-value>)

これら 2 つの場合、そのようなボックス オブジェクトを「値によって」使用できますが、その内容は実際には参照です。これは、すべての値 (ほとんどの場合、実際には) が値渡しされる C に非常によく似ていますが、これらの値の一部は、変更可能なポインターにすることができます。ところで、これらも避けるのが最善です。Scheme では、関数型プログラミングがより一般的な選択肢であるため、それから始めることをお勧めします。

(Scheme に慣れて、十分な抽象化を備えた Scheme を使用している場合は、多くの代替案を模倣する方法も学ぶことができます。)

于 2010-02-21T02:25:20.277 に答える
1

もう少し追加するには...

4 つの基本的なパラメーター受け渡し規則は、値による呼び出し、参照による呼び出し、名前による呼び出し、および必要による呼び出しです。「ほぼ関数型」の言語であるSchemeは、値による呼び出しに依存しています。変数は、いったん作成されると、通常は変更されません。他の 3 つの規則は非常によく似ており、Scheme でボックス内の値を (box と unbox を使用して) 渡すことで引き続き行うことができ、ボックスは値へのポインターとして機能します。

一般に、関数で参照渡しを使用する必要がある場合は、関数の実装方法を再考し、純粋に機能するようにする必要があります。を使用して作成された後に変数を変更することset!は「副作用」であり、通常、関数型プログラミングでは回避されます。

于 2010-02-22T18:44:55.797 に答える