我在自学计划的第一天第一个小时。不用说,我什么都不懂。所以我正在读“小阴谋家”,并使用了这个东西:
作为一个口译员。
例如,我需要在中使用'
(atom? 'turkey)
以避免“未定义的变量”错误。根据这本书,'
是一种Common Lisp语言。
我有两个问题:
我上面提到的
'
。
发布于 2009-10-08 17:02:40
表单'foo
只是一种更快地键入特殊表单的方法
(quote foo)
也就是说,“不要将名称foo
替换为它的值;我真正的意思是名称foo
本身”。
我认为SISC非常适合探索TLS中的练习。
发布于 2009-10-08 20:06:02
您需要了解Scheme的基本评估规则。
First
(atom? 'turkey)
该列表是一个函数应用程序,因此atom?
的计算结果是一个函数。'turkey
是(quote turkey)
的简写符号。对(quote turkey)
求值将得到符号turkey
。
因此,接下来将该函数应用于符号turkey
,并计算返回值。
第二个
(atom? turkey)
同样,我们有一个函数应用程序,atom?
的计算结果是一个函数。这次turkey
是一个变量。计算turkey
会给出绑定到它的值-无论它是什么值。
因此,该函数将应用于变量turkey
的值。
摘要
turkey
是一个变量,它的计算结果是它的值。'turkey
是(quote turkey)
,它的计算结果是符号turkey
。
Scheme重用s-expression,并在s-expression的基础上构建其程序。这就导致了这样一个问题:有时turkey
应该是一个变量,而有时它应该是符号。这对初学者来说有点令人困惑。一段时间后,你会看到它背后的力量。
发布于 2014-12-06 21:46:33
'
是(quote ...)
的缩写,它将代码转换为数据。
stuff
是一个符号,这意味着它可以是变量的名称或函数的名称,等等。
'stuff
给出了符号"stuff“本身。
(dostuff "on" those 4 :parameters)
求值时,将使用四个参数运行函数dostuff
:字符串、变量的内容、数字和关键字。
'(dostuff "on" those 4 :parameters)
在计算时将返回上面的代码,该代码在计算时将使用这四个参数依次运行函数dostuff
。
例如:运行'''somecode
,它返回''somecode
。运行''somecode
,它将返回'somecode
。运行'somecode
,它将返回somecode
。运行somecode
,然后...好吧..。somecode
将运行。
你可以说'
有点像(eval..)
的对立面。
(eval (eval (eval '''(print "hello"))))
会打印"Hello“。
(eval (eval (eval ''''(print "hello")))
不会打印任何东西,但它会返回代码(print "hello")
本身!
除了lisper倾向于将返回的代码(有时甚至是手写代码)称为"list“而不是" code ",其原因将随着您的深入挖掘而变得显而易见。祝你好运:)
https://stackoverflow.com/questions/1539144
复制相似问题