什么是';(撇号)在Lisp/Scheme中?
我在自学计划的第1天第1小时。不用说,我什么都不懂。所以我在读《小阴谋家》并用这个东西: 作为一名口译员 例如,我需要在中使用什么是';(撇号)在Lisp/Scheme中?,scheme,lisp,quote,the-little-schemer,Scheme,Lisp,Quote,The Little Schemer,我在自学计划的第1天第1小时。不用说,我什么都不懂。所以我在读《小阴谋家》并用这个东西: 作为一名口译员 例如,我需要在中使用” (atom? 'turkey) 避免“未定义变量”错误。根据这本书的说法,“”是一种常见的Lisp语言 我有两个问题: 我上面提到的那个翻译好吗?你能推荐另一个吗?我需要一个和小阴谋家合得来的 什么是” 表单'foo只是一种快速键入特殊表单的方法 (quote foo) 也就是说,“不要计算名称foo并用它的值替换它;我实际上是指名称foo” 我认为SISC非常
”
(atom? 'turkey)
避免“未定义变量”错误。根据这本书的说法,“
”是一种常见的Lisp语言
我有两个问题:
”
表单
'foo
只是一种快速键入特殊表单的方法
(quote foo)
也就是说,“不要计算名称foo并用它的值替换它;我实际上是指名称foo”
我认为SISC非常适合探索TLS中的练习。SISC很好,但更轻量级的在线方案执行器是。它实际上不是一个REPL,因为它不是交互式的,但它非常接近。您提交的代码在服务器端执行,而不是使用浏览器小程序。您可以通过短URL共享正在运行的代码 codepad上的页面说它使用了“MZSchemeV372[cgc]” 我使用codepad进行各种快速代码段测试(包括测试代码样本以获得答案!) 对于quote语法,可以使用如下代码看到差异:
(let ((x 5))
(display x) (newline)
(display 'x) (newline))
这将显示:
5
x
5.
x
在第一种情况下,
x
被计算并传递给display
,后者打印5。在第二种情况下,符号x
(与字符串不同)被传递到display
,display打印符号的名称。您需要了解Scheme的基本求值规则
首先:
(atom? 'turkey)
列表是一个函数应用程序,因此atom?
将被计算为一个函数。
“土耳其”
是(引用土耳其)
的简写符号。评估(引用土耳其)
给出符号土耳其
因此,接下来将函数应用于符号土耳其
,并计算返回值
秒
(atom? turkey)
同样,我们有一个函数应用程序,atom?
被计算为一个函数。这次土耳其是一个变量。评估土耳其
会给出与之相关的价值——不管它是什么
因此,该函数将应用于变量turkey
的值
摘要
turkey
是一个变量,它将根据其值进行计算'turkey
是(引用turkey)
,其计算结果为符号turkey
Scheme重用s表达式并用s表达式构建其程序。这导致了一个问题,即有时土耳其应该是一个变量,有时它应该是一个符号。这对初学者来说有点困惑。一段时间后,你会看到它背后的力量
单引号字符是表示(quote foo)的简写方式,其中quote是只返回foo而不计算它的形式 在Scheme或任何Lisp中,有一件事需要真正记住,即所有内容都是默认计算的。所以,在你不想评估的情况下,你需要一种方法来解决这个问题
引用某些东西就是这样做的,单个引用只需要较少的键入,并导致较少的详细代码。如果您正在为
方案
寻找最佳IDE,请选择Dr Racket
。但是当开始时Dr Racket
第一行应该是#lang scheme
,因为drracket
有很多语言,我们已经明确提到了我们要使用的语言
当我们想传递一个参数本身而不是传递参数的值时,我们使用引号。它主要与在使用列表、对和原子时传递的过程有关,这些在C编程语言中是不可用的(大多数人开始使用C编程,因此我们会感到困惑)。这是Scheme编程语言中的代码,它是lisp的方言,我想您可以理解这段代码
(define atom? ; defining a procedure atom?
(lambda (x) ; which as one argument x
(and (not (null? x)) (not(pair? x) )))) ; checks if the argument is atom or not
(atom? '(a b c)) ; since it is a list it is false #f
最后一行(atom?abc)按原样将abc传递给检查abc是否为atom的过程,但当您传递(atom?abc)时,它会检查abc的值并将值传递给它。由于我们没有为它提供任何值简称(quote…
,“
将代码转换为数据
stuff
是一个符号,意味着它可以是变量名或函数名等。'stuff
给你符号“stuff”本身
(dostuff“on”the 4:parameters)
计算时,将运行带有四个参数的函数dostuff
:字符串、变量内容、数字和关键字。”(dostuff“on”the 4:parameters)
求值时将返回上面的代码,求值时,该代码将依次使用这四个参数运行函数dostuff
例如:
运行''somecode
,它返回''somecode
。运行“somecode
,它返回”somecode