私はスキームでスタックをエミュレートしようとしています。私は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. ポインタへの参照対参照渡し?
- 3. CComPtr参照渡し
- 4. 値渡し値渡し参照渡し
- 5. 渡す参照
- 6. 値渡しと参照渡しJavaScriptで
- 7. std :: thread渡しで参照渡しコピーコンストラクタ
- 8. 参照渡しと値渡し。 C++
- 9. 参照渡しと値渡し
- 10. スキームR5RS define-syntaxは無視されますか?
- 11. javaで参照渡し?
- 12. 参照渡しのパラメーターパック
- 13. pthreadの参照渡し値
- 14. 参照渡しのpowershell
- 15. 参照渡しの疑問
- 16. 参照渡しのメリット? (PHP)
- 17. RcppとR:参照渡し
- 18. Cポインタを参照渡し?
- 19. 機能が参照渡し
- 20. C側の参照渡し?
- 21. C++参照渡し:エラー:コール
- 22. QuickSort、参照渡し、再帰
- 23. pandas DataFrameを参照渡し
- 24. 参照渡しですか?
- 25. フォームオブジェクトを参照渡しに渡す
- 26. スキーム - スキームR5RSを実装する方法について考えていますが「不正確」のコンセプトR5RSの数値タワー内
- 27. r5rs evalがその語彙スコープ内で参照を見つけられない
- 28. PHP - グローバル参照と参照渡しを使用する
- 29. Web参照のapple-reference-documentation:// urlスキームを処理します。
- 30. Pythonが参照渡しします
トップの要素を削除してリストを返す以上のことをするには、popが必要です。 pop関数は、リストからも削除しながら、一番上の要素を返す必要があります。したがって、リストを返すことはできません。なぜなら、トップエレメントを返さなければならないからです。 – Crbreingan
'pop 'の前に' peek'を使って削除する前にトップの要素を取得することができます。または、 'pop'がペアを返すようにすることができます。この場合、先頭の要素がポップされた後に、carが先頭要素で、cdrが新しいスタックになります。 –