]> gitweb.factorcode.org Git - factor.git/commitdiff
memoize: adding a MEMO[ word which makes an inlined anonymous memoized quotation.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 5 May 2012 03:39:26 +0000 (20:39 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 5 May 2012 03:39:26 +0000 (20:39 -0700)
basis/memoize/memoize-docs.factor
basis/memoize/memoize-tests.factor
basis/memoize/memoize.factor

index 426bd2916cf0106085733634a0b966007c8d702f..5365665f1f3fa0ecd5ee349f003b42b903059b33 100644 (file)
@@ -26,4 +26,8 @@ HELP: MEMO:
 { $values { "word" "a new word to define" } { "definition" "a word definition" } }
 { $description "Defines the given word at parse time as one which memoizes its output given a particular input. The stack effect is mandatory." } ;
 
+HELP: MEMO[
+{ $syntax "MEMO[ elements... ]" }
+{ $description "Defines the given literal quotation as one which memoizes its outputs given a particular input." } ;
+
 { define-memoized POSTPONE: MEMO: } related-words
index e89685263df3482bcb9e7d112ee9a17c49b42057..63d324ec53d1353120c2db2f0c0683101036243a 100644 (file)
@@ -1,7 +1,8 @@
 ! Copyright (C) 2007, 2009 Slava Pestov, Daniel Ehrenberg.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: math kernel memoize tools.test parser generalizations
-prettyprint io.streams.string sequences eval namespaces see ;
+USING: calendar math math.order kernel memoize tools.test parser
+generalizations prettyprint io.streams.string sequences eval
+namespaces see threads tools.time ;
 IN: memoize.tests
 
 MEMO: fib ( m -- n )
@@ -33,3 +34,11 @@ unit-test
 [ sq ] ( a -- b ) memoize-quot "q" set
 
 [ 9 ] [ 3 "q" get call ] unit-test
+
+: foo ( x -- ) MEMO[ seconds sleep ] ;
+
+[ t ] [
+    { 1/8 1/8 1/8 1/8 1/16 1/16 1/16 }
+    [ [ foo ] each ] benchmark
+    0.18e9 0.25e9 between?
+] unit-test
index 1817cf83a919f67d9ed5d780dea3ac0a13e40847..147354663666b3504e6e343340a6d66f5db4eb29 100644 (file)
@@ -2,7 +2,8 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel hashtables sequences sequences.private arrays
 words namespaces make parser effects.parser math assocs effects
-definitions quotations summary accessors fry hashtables.identity ;
+definitions quotations summary accessors fry hashtables.identity
+stack-checker ;
 IN: memoize
 
 <PRIVATE
@@ -81,3 +82,5 @@ M: memoized reset-word
     [ stack-effect in>> packer call ] [ "memoize" word-prop delete-at ] bi ;
 
 \ invalidate-memoized t "no-compile" set-word-prop
+
+SYNTAX: MEMO[ parse-quotation dup infer memoize-quot append ;