スキームのさまざまなパラメーター受け渡しモードを理解するのを手伝ってくれる人はいますか? 私はSchemeが値渡しのパラメータを実装していることを知っています。しかし、他のモードはどうですか?
スキームでパラメータを渡すための適切なドキュメントはありますか?
スキームのさまざまなパラメーター受け渡しモードを理解するのを手伝ってくれる人はいますか? 私はSchemeが値渡しのパラメータを実装していることを知っています。しかし、他のモードはどうですか?
スキームでパラメータを渡すための適切なドキュメントはありますか?
スキームには、値渡し関数呼び出しのみがあります。言語内で実装できる代替手段は他にもありますが、初心者の場合は、この時点でそれらを試さないことをお勧めします。「参照によって」値を渡す方法を探している場合、それを実現できる1つのオプションはマクロを使用することですが、実際にはそこに行くべきではありません。代わりに、PLT スキームなどの一部のスキーム実装は「ボックス値」を提供します。これは、次のように使用される一種のコンテナです。
<something>
で保持するボックスを作成します(box <something>)
(unbox <some-box>)
(set-box! <some-box> <new-value>)
これら 2 つの場合、そのようなボックス オブジェクトを「値によって」使用できますが、その内容は実際には参照です。これは、すべての値 (ほとんどの場合、実際には) が値渡しされる C に非常によく似ていますが、これらの値の一部は、変更可能なポインターにすることができます。ところで、これらも避けるのが最善です。Scheme では、関数型プログラミングがより一般的な選択肢であるため、それから始めることをお勧めします。
(Scheme に慣れて、十分な抽象化を備えた Scheme を使用している場合は、多くの代替案を模倣する方法も学ぶことができます。)
もう少し追加するには...
4 つの基本的なパラメーター受け渡し規則は、値による呼び出し、参照による呼び出し、名前による呼び出し、および必要による呼び出しです。「ほぼ関数型」の言語であるSchemeは、値による呼び出しに依存しています。変数は、いったん作成されると、通常は変更されません。他の 3 つの規則は非常によく似ており、Scheme でボックス内の値を (box と unbox を使用して) 渡すことで引き続き行うことができ、ボックスは値へのポインターとして機能します。
一般に、関数で参照渡しを使用する必要がある場合は、関数の実装方法を再考し、純粋に機能するようにする必要があります。を使用して作成された後に変数を変更することset!
は「副作用」であり、通常、関数型プログラミングでは回避されます。