我已經分配了家庭作業來制定計劃中的一般記憶過程,到目前爲止,它對採用一個參數的過程起作用,但是對於提供超過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函數應用於值列表? –