scheme - If 和 cond 作为特殊形式

标签 scheme lisp sicp

考虑 SICP 中的这两段:

This construct is called a case analysis, and there is a special form in Lisp for notating such a case analysis. It is called cond (which stands for “conditional”), and it is used as follows:

...

This uses the special form if, a restricted type of conditional that can be used when there are precisely two cases in the case analysis.

类型在此上下文中意味着什么(条件的限制类型)?是否意味着:

  • “if”是“cond”的一种类型?因为句子说“有一种特殊形式”,所以只有一种特殊形式,因为“if”是“cond”的一种类型。
  • “if”和“cond”都是不相关的。它们都是有条件的。如果这是正确的,为什么这句话说“有一种特殊形式”,就像只有一种一样?

最佳答案

“ if [是]条件的受限类型”中,我相信“条件”并不具体意味着cond;一般来说,它的意思是“条件语句/表达式”。

所以有两个,condif。每个都可以根据另一个来定义,因此给定的实现可以选择仅将其中一个作为原语,并根据它来定义另一个;或者实现可以选择将它们都作为原始特殊形式。

特殊形式由解释器(编译器)本身专门处理。

宏也可以用于此目的。那么它们将不会由解释器本身处理,而是由其宏处理机制处理。

所以 if 是一个条件; cond 是一个条件; cond 可以有任意数量的子句; if 必须恰好有两个(或者一个或两个,具体取决于标准)子句;其余的都是英语。 :)

关于scheme - If 和 cond 作为特殊形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51598174/

相关文章:

.net - F# 相当于 Eval

haskell - 检查 Haskell 中函数的内部结构

sicp - 附加到表单如何工作? (SICP 的逻辑编程部分)

functional-programming - 在这种情况下如何在 Racket 上订购我的累积变量?

clojure - Clojure、Scheme/Racket 和 Common Lisp 之间有什么区别?

scheme - 如何读取加载到 guile 变量中的文件?

使用 let/set 设置 "remember"值的方案函数

lisp - 对数字 u 和列表 x 求和的方案函数 u+x1+x2

tree - 如何在方案中使用 apply 编写树形图函数

lisp - Lisp 代码的缩进