为什么Clojure Spels使用带引号的符号而不是关键字?
为什么用引号代替关键字为什么Clojure Spels使用带引号的符号而不是关键字?,clojure,symbols,quote,Clojure,Symbols,Quote,为什么用引号代替关键字 (def objects '(whiskey-bottle bucket frog chain)) (def game-map (hash-map 'living-room '((you are in the living room of a wizards house - there is a wizard snoring loudly on the couch -)
(def objects '(whiskey-bottle bucket frog chain))
(def game-map (hash-map
'living-room '((you are in the living room
of a wizards house - there is a wizard
snoring loudly on the couch -)
(west door garden)
(upstairs stairway attic))
'garden '((you are in a beautiful garden -
there is a well in front of you -)
(east door living-room))
'attic '((you are in the attic of the
wizards house - there is a giant
welding torch in the corner -)
(downstairs stairway living-room))))
(def object-locations (hash-map
'whiskey-bottle 'living-room
'bucket 'living-room
'chain 'garden
'frog 'garden))
(def location 'living-room)
(defn describe-location [location game-map]
(first (location game-map)))
我把'客厅
改成了:客厅
,在所有地方都能用
我对Clojure很陌生,'something
,当:something
可用时,它的意义是什么
(我理解引号的作用-我想知道什么时候使用引号符号而不是关键字。)在Lisp中使用SPELs是为通用Lisp编写的。虽然CL也有关键字(即:foo
),但作者选择使用引用的符号列表。这抓住了Lisp的魔力,以及“代码即数据”的思想——一个符号,在计算时,可以表示一个值,比如一个函数,但也可以表示它本身的值,这是Lisp的一个很酷的东西
这只是我的印象,但当作者为Clojure翻译Casting SPELs时,我相信他决定仍然使用符号来表示数据(即使在Clojure中,使用关键字和字符串更为惯用)为了保持有关Lisp的基本信息的完整性,并能够将代码用作数据,将数据用作代码。在Lisp中转换SPEL的方法是为通用Lisp编写的。虽然CL也有关键字(即:foo
),但作者选择使用引用的符号列表。这抓住了Lisp的魔力,以及“代码即数据”的思想——一个符号,在计算时,可以表示一个值,比如一个函数,但也可以表示它本身的值,这是Lisp的一个很酷的东西
这只是我的印象,但当作者为Clojure翻译Casting SPELs时,我相信他决定仍然使用符号来表示数据(即使在Clojure中,使用关键字和字符串更为惯用)为了保持关于Lisp的基本信息的完整性,并且能够使用代码作为数据和数据作为代码。在游戏中使用符号比使用关键字更容易构建界面 如果您通读了它,您会看到您通过输入类似于
(向西行走)
的命令来控制游戏。我认为作者认为这比(walk:west)
要好得多,而且使用符号可能比将west
从输入转换为关键字:west
要简单得多,不会让初学者感到困惑。在原版和你的Clojure版本中,Conrad都修复了宏的界面,因此你不需要在完成的游戏中引用任何东西,也不需要使用奇怪的冒号
是他书第五章的草稿/变体,名为。在这本书中,他没有使用宏,而是创建了一个游戏读取评估打印循环。有了REPL,你就可以把所有东西都作为数据输入,因此在游戏结束时也不需要引用任何东西
事实上,他使用符号而不是字符串是很奇怪的,直到你认为他可能想让读者很早就熟悉符号
如果你只想学一点CL,我强烈推荐这本书,因为它比演员斯皮尔斯更有趣
作为练习,为什么不尝试使用关键字并尝试编写宏或REPL,这样您仍然可以编写
向西行走
,并且它可以(行走方向:向西)
,而无需对向西
和:向西
之间的映射进行编码。这会使游戏更复杂吗?在游戏中使用符号比使用关键字更容易构建界面
如果您通读了它,您会看到您通过输入类似于(向西行走)
的命令来控制游戏。我认为作者认为这比(walk:west)
要好得多,而且使用符号可能比将west
从输入转换为关键字:west
要简单得多,不会让初学者感到困惑。在原版和你的Clojure版本中,Conrad都修复了宏的界面,因此你不需要在完成的游戏中引用任何东西,也不需要使用奇怪的冒号
是他书第五章的草稿/变体,名为。在这本书中,他没有使用宏,而是创建了一个游戏读取评估打印循环。有了REPL,你就可以把所有东西都作为数据输入,因此在游戏结束时也不需要引用任何东西
事实上,他使用符号而不是字符串是很奇怪的,直到你认为他可能想让读者很早就熟悉符号
如果你只想学一点CL,我强烈推荐这本书,因为它比演员斯皮尔斯更有趣
作为练习,为什么不尝试使用关键字并尝试编写宏或REPL,这样您仍然可以编写
向西行走
,并且它可以(行走方向:向西)
,而无需对向西
和:向西
之间的映射进行编码。它会使游戏变得更复杂吗?'something
是一个符号,而:something
是一个关键字。经典的lisp没有关键字的概念。你的问题标题应该是关于symbol vs关键字,而不是quote vs symbol,因为quote是创建symbol的一种方式。Hanks,我对此感到困惑。我会编辑。@Ankur怎么样???“某物
是一个符号,而:某物
是一个关键字。经典的lisp没有关键字的概念。你的问题标题应该是关于symbol vs关键字,而不是quote vs symbol,因为quote是创建symbol的一种方式。Hanks,我对此感到困惑。我会编辑。@Ankur怎么样??