摘要:
(define funcname (lambda (arg1 ... argn) exp1 ... expn))(define (funcname arg1 ... argn) exp1 ... expn)举例:#lang racket(define (addx x) (lambda (y) (+ y x)))(define addx8 (addx 8))(define addx9 (addx 9))(addx8 100)(addx9 100)(define addy (lambda (x) (lambda (y) (+ y x))))(define addy8 (a... 阅读全文
摘要:
注意,此装饰器的设计前提是:对于相同参数,函数一定返回相同的值.如果某个函数,相同参数可能返回不同值,或者修改了一些外部数据,那么最好不要用此装饰器.有时候对于一些函数,我们需要用相同参数多次调用,且不方便将其预先储存在一个变量中.例如这种,假设有函数f,g,h,m:list=[[f(i),g(f(i)),h(g(f(i))),m(f(i))] for i in range(100)]那么,在计算g(f(i)),要先重复计算一次f(i),再计算g.h(g(f(i)))同理.如果这些函数的计算过程很复杂,那么就浪费了大量资源.再例如很经典的,非尾递归形式的斐波拉契函数:def fibonacci 阅读全文