eopl 第五、六两章谈的就是这个问题。
我写了一个 python 版本的程序,先挖个坑,然后等彻底看完再补上。
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 # the cps version 5 def s(n, f): 6 if n < 1: 7 return f(n) 8 return s(n-1, 9 lambda x: f(x + n)) 10 11 # the trampoline version 12 def t_s(n, f): 13 if n < 1: 14 return lambda :f(n) 15 return lambda : t_s(n-1, lambda x: f(x + n)) 16 17 def trampoline(f): 18 while hasattr(f, ‘__call__‘): 19 f = f() 20 return f 21 22 if __name__ == ‘__main__‘: 23 print s(10, lambda x: x) 24 print trampoline(t_s(10, lambda x: x))
时间: 2024-10-10 16:50:31