首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用,应用-基元过程和在底层应用-方案

应用,应用-基元过程和在底层应用-方案
EN

Stack Overflow用户
提问于 2020-01-14 23:46:48
回答 1查看 264关注 0票数 1

Apply4.1.1 SICP评价者的核心中定义为:

代码语言:javascript
复制
(define (apply procedure arguments)
  (cond ((primitive-procedure? procedure)
         (apply-primitive-procedure ;
          procedure
          arguments));

        ((compound-procedure? procedure)
        .....
        (else
        ....)

我引用了"4.1.4将评估器作为一个程序“中apply-primitive-procedure的定义如下:

代码语言:javascript
复制
(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-schemeapply

摘要:

代码语言:javascript
复制
 ,-> apply -> apply-primitive-procedure -> apply-in-underlying-scheme --.
 '----------------------------------------------------------------------'

我想这不是递归。

我的理解怎么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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是一个原始递归操作符,您担心它不会完成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59743375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档