小编Rpt*_*ptx的帖子

在mit-scheme REPL中取消定义一个过程

我正在使用mit-scheme来经历SICP,昨天,我做了一些愚蠢的事情,我想知道是否有办法从中恢复,没有关闭REPL,并重新开始.如果我定义一个非工作程序,与原语同名并打破一切,有没有办法'取消'它?

(define (+ a b) (...junk))
Run Code Online (Sandbox Code Playgroud)

我想"取消定义"这个'+'并继续使用原来的'+'.

scheme sicp mit-scheme

3
推荐指数
1
解决办法
146
查看次数

applicative-order/call-by-value 和 normal-order/call-by-name 的区别

背景

我正在根据在线课程学习 sicp,但对它的讲义感到困惑。在讲义中,applicative order 似乎等于 cbv 和 normal order 等于 cbn。

困惑

但是wiki指出,除了求值顺序(从左到右,从右到左,或者同时),applicative order和cbv是有区别的:

与按值调用不同,应用顺序评估在应用函数之前尽可能地减少函数体内的术语。

我不明白减少是什么意思。在进入函数计算之前,应用顺序和 cbv 都不会获得变量的确切值。

而对于正常的顺序和cbv,根据wiki,我更加困惑。

相比之下,按名称调用策略不会在未应用的函数体内求值。

我猜这是否意味着正常顺序会在未应用的函数体内进行评估。怎么会这样?

  1. 有人能给我一些关于四种策略的更具体的定义吗?
  2. 有人可以使用任何编程语言为每种策略展示一个示例。

非常感谢?

evaluation scheme programming-languages sicp operator-precedence

3
推荐指数
1
解决办法
1268
查看次数