最后,就是将水泼到巫师身上:
(game-action splash bucket wizard living-room
(cond (not bucket-filled) '(the bucket has nothing in it -)
(have? 'frog) '(the wizard awakens and sees that you stole
his frog -
he is so upset he banishes you to the
netherworlds - you lose! the end -)
:else '(the wizard awakens from his slumber and greets you
warmly -
he hands you the magic low-carb donut - you win!
the end -)))
现在你已经编写完成了一个文字冒险游戏了!
点击这里是完整的游戏.
点击这里是代码.
为了使教程尽可能的简单,很多Lisp的执行细节被忽略了,所以最后,让我们来看看这些细节!
现在,我们来聊一聊被忽略的细节!
首先,Clojure有一套很成熟的定义变量以及改变变量值的系统.在此教程中,我们只使用了def来设置和改变全局变量的值.而在真正的Clojure代码里,你不会这么做.取而代之,你会使用Refs,Atoms和Agents,它们提供了更清晰,以及线程安全的方式来管理数据.
另一个问题就是我们在代码中大量使用了符号(symbol)
'(this is not how Lispers usually write text)
"Lispers write text using double quotes"
符号在Clojure有特殊含义,主要是用来持有函数,变量或其它内容的.所以,在Lisp中将符号作为文本信息描述是很奇怪的事情!使用字符串来显示文本信息可以避免这样的尴尬!不过,使用字符串的话,在教程里就没法讲很多关于符号的内容了!
还有就是SPEL在Lisp里面更普遍的叫法是"宏",使用defmacro来定义,但是这个名字不易于教学,所以没有提及.你可以阅读此文,这是我为什么没有使用"宏"这个名字的原因.
最后,在编写类似game-action这样的SPEL的时候,很可能会发生命名重复的问题.当你编写了足够多的lisp的时候,你会越来越能体会到这个问题了.
Q. 后面我该阅读哪些内容来扩充我的Lisp知识? A.
在cliki网站有很多Lisp书籍可以下载.
如果你对于理论上的内容很感兴趣,那么我推荐Paul Graham的 On Lisp电子书,它是免费的.他网站上的一些短文也很精彩.
如果你对实际应用比较感兴趣,那么大多数Lisp程序员对Perter Seibel编写的"Practical Common Lisp"这本书推崇有加,你可以从这里获得
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shumachanpin/article-41579-8.html
然后就宣布十二海里领海权