Sto affrontando un paio di problemi durante la scrittura di un auto-memoizer in Scheme.Scrittura di un memoizzatore automatico in Schema. Aiuto con macro e wrapper
Ho una funzione di memoizer funzionante, che crea una tabella hash e controlla se il valore è già calcolato. Se è stato calcolato prima, restituisce il valore che chiama la funzione.
(define (memoizer fun)
(let ((a-table (make-hash)))
(λ(n)
(define false-if-fail (λ() #f))
(let ((return-val (hash-ref a-table n false-if-fail)))
(if return-val
return-val
(begin
(hash-set! a-table n (fun n))
(hash-ref a-table n)))))))
Ora voglio creare una funzione Memoize-wrapper come questo:
(define (memoize-wrapper function)
(set! function (memoizer function)))
E si spera creare una macro denominata def-memo che definisce la funzione con il Memoize-wrapper. per esempio. la macro potrebbe espandersi a (memoizer (definire la funzione nome-argomenti del corpo ...) o qualcosa di simile
Così che dovrei essere in grado di fare:.
(def-memo (factorial n)
(cond
((= n 1) 1)
(else (* n (factorial (- n 1))))))
che dovrebbe creare una versione di memoized il fattoriale invece del normale un lento.
mio problema è che il
- il Memoize-involucro non funziona correttamente, si pretende molto chiamare la funzione memoized ma la funzione originaria .
- Non ho idea di come scrivere una definizione all'interno della macro. Come posso assicurarmi di poter ottenere argomenti di lunghezza variabile e corpo di lunghezza variabile? Come posso quindi definire la funzione e avvolgerla con il memoizer?
Grazie mille.
WOW. È semplicemente fantastico Potresti commentare brevemente il tuo codice, in particolare il macro. Perché ci sono. ? perché hai fornito? E hai davvero bisogno di applicare? Sono un principiante. Grazie. – unj2
In un elenco di parametri,. indica che la seguente variabile è associata a più di una cosa. Nella macro, p è una lista di parametri, non solo un singolo parametro (il corpo è una lista di espressioni). La stessa cosa nella funzione, è necessario applicare per applicare p, una lista di parametri, alla funzione f. –
Vedere anche questo: http://planet.plt-scheme.org/display.ss?package=memoize.plt&owner=dherman –