Implement simple-{list,lset}-memoizer to capture common pattern.
authorChris Hanson <org/chris-hanson/cph>
Sat, 28 Jan 2017 11:19:02 +0000 (03:19 -0800)
committerChris Hanson <org/chris-hanson/cph>
Sat, 28 Jan 2017 11:19:02 +0000 (03:19 -0800)
src/runtime/memoizer.scm
src/runtime/runtime.pkg

index 0df1e6e2bb5a695703eadbc16dd9a43e4081d815..032edceeb7a876e651e33d097fde891cfbb2158c 100644 (file)
@@ -124,4 +124,23 @@ USA.
  (lambda ()
    (set! list-memoizer (make-list-memoizer make-list= #f))
    (set! lset-memoizer (make-list-memoizer make-lset= #t))
+   unspecific))
+
+(define (make-simple-list-memoizer list-memoizer)
+  (lambda (elt= get-key get-datum)
+    (let ((memoizer
+           (list-memoizer elt=
+                          (lambda (args)
+                            (apply get-key args))
+                          (lambda (args)
+                            (apply get-datum args)))))
+      (lambda args
+        (memoizer args)))))
+
+(define simple-list-memoizer)
+(define simple-lset-memoizer)
+(add-boot-init!
+ (lambda ()
+   (set! simple-list-memoizer (make-simple-list-memoizer list-memoizer))
+   (set! simple-lset-memoizer (make-simple-list-memoizer lset-memoizer))
    unspecific))
\ No newline at end of file
index 9c6caa3e6a219c5039d0e6670f0beceed0f40a29..372f7a1c1742d4a985456dbce2217cdcc08523f8 100644 (file)
@@ -2547,6 +2547,8 @@ USA.
           memoizer-table
           memoizer-procedure
           memoizer?
+          simple-list-memoizer
+          simple-lset-memoizer
           weak-eqv-memoizer))
 
 (define-package (runtime history)