lea*_*icp 0 lisp scheme sicp racket
在谈论 Painters 时,SICP 使用定义如下的程序:
(define (segments->painter segment-list)
...
)
Run Code Online (Sandbox Code Playgroud)
不幸的是,文本并没有(还?)说明什么->代表什么。->Scheme中的用法是什么?例如,显示段将被视为画家的“方法”(或者反之亦然)是否是 OOP 风格的事情?我唯一见过这个->符号的地方是在 C 中,当然我们在这里不处理指针,所以我有点不清楚它是如何使用的或它在什么约定中使用。
它只是名称的允许字符的一部分,因此它只是segments->painter恰好对过程求值的变量的一部分。
虽然没有任何真正的语法意义,但 Scheme 中有一些通用的命名约定,旨在向源代码的读者提供信息。类似的过程a->b将类型/类别 a 的参数转换为类型/类别 b 之一。例如。number->string接受一个数字和一个基数,并将它们计算为该数字的字符串表示形式。您的示例采用segments并评估为 a painter,我不需要知道画家的一部分是什么或该方法如何假设它。在 Java 中,人们会调用相同的方法segmentsToPainter,每个 Java 开发人员都会理解它的作用。
另一个相同的例子是以问号结尾的程序。例如。done?和color?是检查某事物的参数并返回真值或假值的过程示例。Java 对is和has前缀也做同样的事情,例如。isDone或hasColor,除了命名约定外,没有is或has具有任何真正的句法含义。