lazy-lists: add LAZY: word
parent
b66cee04b3
commit
0c9bd24059
|
@ -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
|
|
@ -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 } ;
|
|
@ -4,6 +4,8 @@
|
||||||
PROVIDE: contrib/lazy-lists {
|
PROVIDE: contrib/lazy-lists {
|
||||||
"lists.factor"
|
"lists.factor"
|
||||||
"lists.facts"
|
"lists.facts"
|
||||||
|
"lazy.factor"
|
||||||
|
"lazy.facts"
|
||||||
"lazy-io.factor"
|
"lazy-io.factor"
|
||||||
"lazy-io.facts"
|
"lazy-io.facts"
|
||||||
"examples.factor"
|
"examples.factor"
|
||||||
|
|
Loading…
Reference in New Issue