首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Lisp / Scheme中的‘(撇号)是什么?

Lisp / Scheme中的‘(撇号)是什么?
EN

Stack Overflow用户
提问于 2009-10-08 16:58:54
回答 6查看 31.9K关注 0票数 66

我在自学计划的第一天第一个小时。不用说,我什么都不懂。所以我正在读“小阴谋家”,并使用了这个东西:

http://sisc-scheme.org/sisc-online.php

作为一个口译员。

例如,我需要在中使用'

代码语言:javascript
复制
(atom? 'turkey)

以避免“未定义的变量”错误。根据这本书,'是一种Common Lisp语言。

我有两个问题:

我上面提到的

  1. 是一个好的解释器吗?你能推荐另外一种吗?我需要一个和小阴谋家很配的'

  • 什么是小阴谋家?
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-10-08 17:02:40

表单'foo只是一种更快地键入特殊表单的方法

代码语言:javascript
复制
(quote foo)

也就是说,“不要将名称foo替换为它的值;我真正的意思是名称foo本身”。

我认为SISC非常适合探索TLS中的练习。

票数 63
EN

Stack Overflow用户

发布于 2009-10-08 20:06:02

您需要了解Scheme的基本评估规则。

First

代码语言:javascript
复制
(atom? 'turkey)

该列表是一个函数应用程序,因此atom?的计算结果是一个函数。'turkey(quote turkey)的简写符号。对(quote turkey)求值将得到符号turkey

因此,接下来将该函数应用于符号turkey,并计算返回值。

第二个

代码语言:javascript
复制
(atom? turkey)

同样,我们有一个函数应用程序,atom?的计算结果是一个函数。这次turkey是一个变量。计算turkey会给出绑定到它的值-无论它是什么值。

因此,该函数将应用于变量turkey的值。

摘要

turkey是一个变量,它的计算结果是它的值。'turkey(quote turkey),它的计算结果是符号turkey

Scheme重用s-expression,并在s-expression的基础上构建其程序。这就导致了这样一个问题:有时turkey应该是一个变量,而有时它应该是符号。这对初学者来说有点令人困惑。一段时间后,你会看到它背后的力量。

票数 29
EN

Stack Overflow用户

发布于 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 ",其原因将随着您的深入挖掘而变得显而易见。祝你好运:)

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1539144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档