在 Scheme/SICP 中使用“->”

问题描述

在谈到 Painters 时,SICP 使用的程序定义如下:

(define (segments->painter segment-list)
   ...
)

不幸的是,文本(还?)没有说明 -> 代表什么。 Scheme中->用法是什么?例如,显示段将被视为画家的“方法”(或者反之亦然)是否是 OOP 式的事情?我唯一见过 -> 符号的地方是在 C 中,当然我们在这里不处理指针,所以我有点不清楚它是如何使用的或它在什么约定中使用。>

解决方法

它只是名称中允许字符的一部分,因此它只是碰巧评估为过程的变量 segments->painter 的一部分。

虽然没有任何真正的语法意义,但 Scheme 中有一些通用的命名约定,旨在向源代码的读者提供信息。像 a->b 这样的过程将类型/类别 a 的参数转换为类型/类别 b 之一。例如。 number->string 接受一个数字和一个基数,并将它们计算为该数字的字符串表示形式。您的示例采用 segments 并评估为 painter 并且我不需要知道画家的一部分是什么或该方法如何假设它。在 Java 中,人们会调用相同的 segmentsToPainter,每个 Java 开发人员都会明白它的作用。

同样的另一个例子是以问号结尾的程序。例如。 done?color? 是检查某些参数并返回真值或假值的过程示例。 Java 对 ishas 前缀执行相同的操作,例如。 isDonehasColor,没有 ishas 除了命名约定之外具有任何真正的句法含义。