私はスキームでスタックをエミュレートしようとしています。私はDrSchemeを使用しており、言語R5RSを選択します。私は、ポップ、プッシュ、およびピークの機能を作成する必要があります。しかし、私はどのように参照渡す方法を考え出すのに問題があります。私はボックスに関するいくつかの情報を読みましたが、R5RSではサポートされていません。参照渡すための他の方法はありますか?スキームR5RS:参照渡し
3
A
答えて
0
命令型言語で行うことができる「参照」を渡す代わりに、Schemeは機能的な意味で考えることをお勧めします。
- スタック
- 新しい要素
とリターンと組み合わせて、新たな要素が含まれている新しいスタック:これはあなたのpush
操作は、例えば、2つのパラメータを取ることを意味します既存のスタックの残りの部分。同様に、pop
オペレーションはスタックをとり、先頭の要素がなくなったものを返します。peek
は先頭の要素の値を返します。
Schemeのリストはスタックとほぼ同じように動作します。以下のマッピングは、あなたが始めるのに役立つでしょう: - 短所
- プッシュ最初の
1
短い答え:R5RSを使用しないでください。ちょうど母国語を使用してください。 DrRacketの現在のバージョンでは、その言語は「ラケット」と呼ばれています。ここでボックスを使用するプログラムです:
#lang racket
(define b (box 234))
(set-box! b 333)
(unbox b)
FWIW:グレッグの答えは私のものよりも、純粋に機能的であるが、変更可能な構造はDrRacket(旧姓DrScheme)で使用できないことを信じること間違いだろう。
最後に、「参照による呼び出し」という用語を誤って使用しています。ボックスは単なる変更可能な構造体であり、value-by-value言語(ラケット、r5rs、javaなど)はこれらの構造をうまく突然変異させることができます。
関連する問題
- 1. 参照渡しと参照渡し
- 2. CComPtr参照渡し
- 3. 値渡し値渡し参照渡し
- 4. std :: thread渡しで参照渡しコピーコンストラクタ
- 5. 参照渡しと値渡し。 C++
- 6. 値渡しと参照渡しJavaScriptで
- 7. C側の参照渡し?
- 8. javaで参照渡し?
- 9. C++参照渡し:エラー:コール
- 10. 参照渡しのパラメーターパック
- 11. Cポインタを参照渡し?
- 12. 参照渡しの疑問
- 13. 参照渡しのメリット? (PHP)
- 14. pthreadの参照渡し値
- 15. フォームオブジェクトを参照渡しに渡す
- 16. スキームR5RS define-syntaxは無視されますか?
- 17. スキーム - スキームR5RSを実装する方法について考えていますが「不正確」のコンセプトR5RSの数値タワー内
- 18. 参照でベクトルを渡す
- 19. Visual Basic 6.0値渡し参照差分
- 20. 参照渡しと積分プロモーション
- 21. Mutexオブジェクトは参照渡しですか?
- 22. jQuery DOMオブジェクトと参照渡し
- 23. 深い対浅いコピー、参照渡し
- 24. ポインタの配列と参照渡し
- 25. RWCString - 値渡しまたはconst参照
- 26. C++での参照渡しの値
- 27. コール時には、参照渡し
- 28. ctypesと関数への参照渡し
- 29. PHP配列、常に参照渡し
- 30. ポインタは参照渡しですか? (サニティチェック)
トップの要素を削除してリストを返す以上のことをするには、popが必要です。 pop関数は、リストからも削除しながら、一番上の要素を返す必要があります。したがって、リストを返すことはできません。なぜなら、トップエレメントを返さなければならないからです。 – Crbreingan
'pop 'の前に' peek'を使って削除する前にトップの要素を取得することができます。または、 'pop'がペアを返すようにすることができます。この場合、先頭の要素がポップされた後に、carが先頭要素で、cdrが新しいスタックになります。 –