X-Git-Url: http://git.kpe.io/?p=kmrcl.git;a=blobdiff_plain;f=functions.lisp;h=3bc09bcd8fe6d2bddb3356ab7ba73fca6bd995af;hp=ffc8ac6cddbce58debbbc092dfac3c93dff06d4a;hb=ba354a40a203103a4cf16cd3d21f89f707ba5205;hpb=4de7f25a69c218303f170314ac26217770a531ed diff --git a/functions.lisp b/functions.lisp index ffc8ac6..3bc09bc 100644 --- a/functions.lisp +++ b/functions.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: functions.lisp,v 1.1 2003/04/28 23:51:59 kevin Exp $ +;;;; $Id: functions.lisp,v 1.2 2003/05/16 12:55:15 kevin Exp $ ;;;; ;;;; This file, part of KMRCL, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -18,18 +18,17 @@ (in-package :kmrcl) -(defun memo-proc (fn) +(defun memo-proc (fn &optional (test 'equal)) "Memoize results of call to fn, returns a closure with hash-table" - (let ((cache (make-hash-table :test #'equal))) + (let ((cache (make-hash-table :test test))) #'(lambda (&rest args) (multiple-value-bind (val foundp) (gethash args cache) (if foundp val - (setf (gethash args cache) - (apply fn args))))))) + (setf (gethash args cache) (apply fn args))))))) -(defun memoize (fn-name) - (setf (fdefinition fn-name) (memo-proc (fdefinition fn-name)))) +(defun memoize (fn-name &optional (test 'equal)) + (setf (fdefinition fn-name) (memo-proc (fdefinition fn-name) test))) (defmacro defun-memo (fn args &body body) "Define a memoized function"