美文网首页
正则序和应用序

正则序和应用序

作者: 岦_ | 来源:发表于2016-02-01 23:40 被阅读366次

要点:

正则序:先展开过程,再求值。
应用序:先求值,再代入过程。

SICP习题1.5中答案所述,对于以下代码:

(define (p) (p))

(define (test x y)
  (if (= x 0)
    0
    y))
(test 0 (p))

如果解释器采用的是应用序,则程序会不断地执行,因为需要求值p函数,然而p函数返回自己,因此进入死循环。

(test 0 (p)) 
(test 0 (p)) 
(test 0 (p))
...

而对于采用正则序的解释器,程序则能成功输出0,因为,解释器先展开过程,再求值(如果表达式有用到,而这里因为x=0,并没有用到p函数),过程是这样的:

(test 0 (p)) 
 (if (= 0 0) 0 (p)) 
 (if #t 0 (p)) 
 0 

相关文章

网友评论

      本文标题:正则序和应用序

      本文链接:https://www.haomeiwen.com/subject/gwiskttx.html