私はLispでSPELをキャストしていますが、これはオブジェクトのピックアップを処理するために提案されたソリューションです。
(define *location* 'living-room)
(define *object-locations*
'((whiskey-bottle living-room)
(bucket living-room)
(chain garden)
(frog garden)))
(define (pickup-object object)
(cond [(is-at? object *location* *object-locations*)
(push! (list object 'body) *object-locations*)
(string-append "You're now carrying the " (symbol->string object) ".")]
[else "There's no such object in here."]))
これが非効率だと思うのは私だけですか?私が理解している限り、このpush!
関数は、プレイヤーがオブジェクトを拾うたびcons
に新しいpair
ものです。*object-locations*
これはこのような小さなゲームでは大きな問題ではないかもしれませんが、在庫からアイテムを置くオプションを追加すると、*object-locations*
リストは無限に大きくなる可能性があります...たとえば、の代わりにのを置き換えるpickup-object
必要はありません?の別のコピーを追加しますcdr
(whiskey-bottle living-room)
pair
私はLispに不慣れで、間違っているかもしれません...誰かが私の仮定が正しいかどうか説明してもらえますか?もしそうなら、Lispテキストアドベンチャーでオブジェクトのピックアップを処理するための最良の方法は何でしょうか?