Apply在4.1.1 SICP评价者的核心中定义为:
(define (apply procedure arguments)
(cond ((primitive-procedure? procedure)
(apply-primitive-procedure ;
procedure
arguments));
((compound-procedure? procedure)
.....
(else
....)我引用了"4.1.4将评估器作为一个程序“中apply-primitive-procedure的定义如下:
(define (apply-primitive-procedure proc args)
(apply-in-underlying-scheme
(primitive-implementation proc) args))所以apply-primitive-procedure是由apply-in-underlying-scheme实现的
尽管如此,请参阅脚注:
Apply-in-underlying-scheme是我们在前面几章中使用的apply过程。元计算程序的apply过程([4.1.1])模拟了这个原语的工作。有两个不同的东西叫做apply导致了运行元计算器的技术问题,因为定义元评估器的apply将掩盖原语的定义。其中一种方法是重命名元级=apply=,以避免与原始过程的名称发生冲突。相反,我们假设已经保存了对底层=apply=的引用,方法是(define apply-in-underlying-scheme apply)在定义元级apply之前。这允许我们以不同的名称访问apply的原始版本。
它在4.1.1中声明apply-in-underlying-scheme是apply。
摘要:
,-> apply -> apply-primitive-procedure -> apply-in-underlying-scheme --.
'----------------------------------------------------------------------'我想这不是递归。
我的理解怎么了?
发布于 2020-01-15 09:07:26
Apply是指所有非特殊形式(特殊形式在eval中被考虑)的函数应用程序。Apply是一个递归函数,它将永远完成。
Apply被细分为2例程序申请:
-实现语言的系统内部
这里是在目标语言和用于实现目标语言(源语言)的语言之间进行转换的地方。
在这里,您需要计算每个参数(通过eval),并在调用源语言的应用程序函数之前将结果对象转换为源语言中的类似对象。对于某些参数,可能会发生eval->apply的递归。
-使用目标语言提供的组合手段在目标语言中创建的组合。
在本例中,还需要对每个参数递归调用eval,并使用目标语言中的函数应用程序。在这种情况下,您不需要将eval的结果转换为源语言中的对象。
因此,在组合的情况下,apply中也有递归,但是它是一种递归,它将完成(函数应用程序函数是一个https://en.wikipedia.org/wiki/Primitive_recursive_function),因为每次计算一个较小的部分(操作符、操作数和完整的初始表达式)。
我认为您没有注意到apply是一个原始递归操作符,您担心它不会完成。
https://stackoverflow.com/questions/59743375
复制相似问题