我已经分配了家庭作业来制定计划中的一般记忆过程,到目前为止,它对采用一个参数的过程起作用,但是对于提供超过1个参数时似乎是最后一个参数的失败。它也没有记录不采取任何论据的程序。计划中的一般记忆
任何帮助将不胜感激。
(define mem
(lambda (mem-it func)
(let ((table (make-table))(func-store func))
(cond
((equal? mem-it 'memoize)
(lambda args
(if (null? args)
func
(let ((prev (lookup args table)))
(or prev
(let ((result (apply func args)))
(insert! args result table)
result))))))
((equal? mem-it 'unmemoize)
(func-store))
(else (display "No Such command"))))))
这是我迄今为止
(define (test-proc . args)
(display "computing test-proc of ")
(display args)
(newline)
(if (null? args)
0
(+ (expt (- 42 (car args)) 2)
(apply test-proc (cdr args)))))
这里是测试程序提供
当我尝试运行下面的测试
(set! test-proc (mem 'memoize test-proc))
(test-proc 40 41 42 43 44)
出现的错误
以下是使用的其他程序
(define (make-table)
(list '*table*))
(define (lookup key table)
(let ((record (assoc key (cdr table))))
(and record (cdr record))))
(define (insert! key value table)
(let ((record (assoc key (cdr table))))
(if record
(set-cdr! record value)
(set-cdr! table
(cons (cons key value) (cdr table))))))
由于缩进关闭,您的代码不可读。你为什么不使用编辑器来为你做这个? – Sylwester
希望现在看起来更好 – Cezar
你的问题到底是什么?您是否试图记忆多个参数的函数,或者您是否试图将一个参数的memoized函数应用于值列表? –