lazy-lists: add LAZY: word

chris.double 2006-10-07 06:30:28 +00:00
parent b66cee04b3
commit 0c9bd24059
3 changed files with 35 additions and 0 deletions

View File

@ -0,0 +1,20 @@
! Copyright (C) 2004 Chris Double.
! See http://factorcode.org/license.txt for BSD license.
!
USING: kernel sequences words inference namespaces math parser ;
IN: lazy-lists
: stack-effect-in ( quot word -- n )
stack-effect dup [
nip effect-in length
] [
drop infer first
] if ;
: make-lazy-quot ( word quot -- quot )
[
dup , swap stack-effect-in [ \ curry , ] times \ <promise> ,
] [ ] make ;
: LAZY: ( -- object object object )
CREATE dup reset-generic [ dupd make-lazy-quot define-compound ] f ; parsing

View File

@ -0,0 +1,13 @@
! Copyright (C) 2006 Chris Double.
! See http://factorcode.org/license.txt for BSD license.
USING: help lazy-lists ;
HELP: LAZY:
{ $syntax "LAZY: word definition... ;" }
{ $values { "word" "a new word to define" } { "definition" "a word definition" } }
{ $description "Creates a lazy word in the current vocabulary. When executed the word will return a " { $link <promise> } " that when forced, executes the word definition. Any values on the stack that are required by the word definition are captured along with the promise." }
{ $examples
{ $example "LAZY: my-add ( a b -- c ) + ;\n1 2 my-add force ." }
}
{ $see-also force promise-with promise-with2 } ;

View File

@ -4,6 +4,8 @@
PROVIDE: contrib/lazy-lists {
"lists.factor"
"lists.facts"
"lazy.factor"
"lazy.facts"
"lazy-io.factor"
"lazy-io.facts"
"examples.factor"