memoize: adding a MEMO[ word which makes an inlined anonymous memoized quotation.

db4
John Benediktsson 2012-05-04 20:39:26 -07:00
parent d616f4779e
commit bd1b3534b5
3 changed files with 19 additions and 3 deletions

View 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

View 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

View 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 ;