当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《什么是Lisp/Scheme中的'(撇号)?》经验,为你挑选了4个好方法。

我在自己教学计划的第1小时1.不用说,我什么都不懂.所以我正在阅读The Little Schemer并使用这个东西:

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

作为翻译.

我需要使用'例如

(atom? 'turkey)

避免"未定义的变量"错误.的',根据这本书,是Common Lisp的事情.

我有两个问题:

    我上面提到的翻译是好的吗?你能推荐另一个吗?我需要一个能与The Little Schemer合作的人.

    什么是'

Jonathan Fei.. 56

表单'foo只是键入特殊表单的更快捷方式

(quote foo)

也就是说,"不要评估名称foo并用它的值替换它;我的意思是名字foo".

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



1> Jonathan Fei..:

表单'foo只是键入特殊表单的更快捷方式

(quote foo)

也就是说,"不要评估名称foo并用它的值替换它;我的意思是名字foo".

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



2> Rainer Joswi..:

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

第一:

(atom? 'turkey)

该列表是一个函数应用程序,因此atom?被评估为函数. 'turkey是一个简写符号(quote turkey).评估(quote turkey)给出了符号turkey.

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

第二

(atom? turkey)

我们再次拥有一个函数应用程序并对函数atom?进行求值.这个时间turkey是变量.评估turkey给出了绑定它的价值 - 它是什么.

那么函数就应用于变量的值turkey.

摘要

turkey是一个变量,它被评估为其值.'turkey(quote turkey),它被评估为符号turkey.

Scheme重用s表达式并用s表达式构建程序.这导致了有时turkey应该是变量的问题, 有时它应该是符号.这对初学者来说有点混乱.过了一段时间,你会看到它背后的力量.



3> Greg Hewgill..:

SISC很好,但更轻量级的在线Scheme执行程序是http://codepad.org.它实际上不是一个REPL,因为它不是交互式的,但它非常接近.您提交的代码在服务器端执行,而不是使用浏览器小程序.并且您可以通过短URL共享您正在运行的代码.

在codepad上的about页面说它使用"MzScheme v372 [cgc]".

我使用键盘进行各种快速片段测试(包括为SO答案测试代码示例!).

对于引用语法,可以使用如下代码看到差异:

(let ((x 5))
  (display x) (newline)
  (display 'x) (newline))

这显示:

5
x

在第一种情况下,x评估并传递给display,打印5.在第二种情况下,传递符号 x(与字符串不同)display,打印符号的名称.



4> enrey..:

简写(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"))))会打印"你好".
(eval (eval (eval ''''(print "hello")))-通知一个更'然后eval-不显示任何信息,但它会返回代码(print "hello")本身!

除了lispers倾向于调用返回的代码(有时甚至是手写代码)"list"而不是"code",原因是当你深入挖掘时会出现明显的流血现象.祝好运 :)


不,在方案中(与普通的lisp相反),东西是标识符.它通过引用它成为一个符号,如'stuff.这是一个小问题,但要做到这一点很好.在方案中,标识符不需要实现为符号,如在常见的lisp中.有关最新的方案标准,请参阅r7的§2.1和§6.5.
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有