我正在学习 Lisp 中的 Casting 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
的。虽然这在像这样的小型游戏中可能不是主要问题,但如果要添加从库存中放下物品的选项,列表可能会无限增长......不应该替换of ,例如,而不是添加另一个副本?pair
*object-locations*
*object-locations*
pickup-object
cdr
(whiskey-bottle living-room)
pair
我是 Lisp 的新手,可能会弄错......有人可以解释我的假设是否正确,如果是的话,在 Lisp 文本冒险中处理拾取对象的最佳方法是什么?