一切都在计划列表?(Is everything a list in scheme?)

2019-09-19 23:35发布

在YouTube上 - 随着书“简单计划”(第二版),我在看“讲座计算机科学61A”。 在讲座中,教师采用STK解释,但我使用鸡肉方案解释。

在第一次讲座中,他使用这如果它被称为像“第一次”的过程:

(first 'hello) 

它返回“H”。

在这本书的“简单计划”它有多么第一可以实现的例子:

(define (first sent)
  (car sent))

这在我的测试,如果发送的理解作品是一个列表。 我想了解,如果它是正确地说,“一切都是列表”中的方案。 更具体哪来的名单“你好 ,如果有一个,为什么,因为它是写在这本书不会在第一道工序的工作?

此外,如果每一个实现与写“一切都是列表”中记为什么同样的代码并不适用于所有方案的实施工作?

Answer 1:

不,这是一个普遍的误解,因为列表是在方案规划(和一般的常函数式编程)如此普遍。 大多数Scheme实现都与许多数据类型,例如字符串,符号,矢量,地图/表,记录集,bytevectors,等等。

这段代码(first 'hello)不太可能在大多数计划工作,因为它按标准是无效的。 表达'hello表示符号 ,它是不能被解构为列表中的不透明值(你的符号做的主要事情是比较它们eq? 这可能是STK的怪癖,是不幸被你的书教。

Scheme编程语言的语言更规范的描述。 如果你只是想学习编程,我建议HTDP



Answer 2:

并非一切都在计划列表。 我有点惊讶的是,你实际上显示示例工作 ,在其他方案解释它会失败,因为first是通常的别名carcar仅被定义为cons 。 例如,在球拍:

(first 'hello)
> first: expected argument of type <non-empty list>; given 'hello

(car 'hello)
> car: expects argument of type <pair>; given 'hello

方案的基本数据结构是利弊对,它有可能建立任意链接的数据结构 - 尤其是单链表。 有支持的其他数据结构,像载体和哈希表。 当然,也有基本类型-布尔型,符号,数字,字符串,字符等,所以这是错误的声明,“一切都是列表”方案。



Answer 3:

对于简单的方案: 第一功能和休息都没有从该计划的标准通用的标准,也没有附带内置到DrRacket的。 简单方案API被设计成简单的计划课程的一部分,可以很容易地对各种数据的统一工作。 我们不能对底层的,低级实现从使用简单的方案教学语言的只是经验是如何工作太多的假设! 有参与制作的东西,简单的一个运行成本:它没有免费的午餐。



文章来源: Is everything a list in scheme?