From 0c9bd2405927221a580f2e00127c312a63a579a6 Mon Sep 17 00:00:00 2001 From: "chris.double" Date: Sat, 7 Oct 2006 06:30:28 +0000 Subject: [PATCH] lazy-lists: add LAZY: word --- contrib/lazy-lists/lazy.factor | 20 ++++++++++++++++++++ contrib/lazy-lists/lazy.facts | 13 +++++++++++++ contrib/lazy-lists/load.factor | 2 ++ 3 files changed, 35 insertions(+) create mode 100644 contrib/lazy-lists/lazy.factor create mode 100644 contrib/lazy-lists/lazy.facts diff --git a/contrib/lazy-lists/lazy.factor b/contrib/lazy-lists/lazy.factor new file mode 100644 index 0000000000..8b6813eb93 --- /dev/null +++ b/contrib/lazy-lists/lazy.factor @@ -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 \ , + ] [ ] make ; + +: LAZY: ( -- object object object ) + CREATE dup reset-generic [ dupd make-lazy-quot define-compound ] f ; parsing diff --git a/contrib/lazy-lists/lazy.facts b/contrib/lazy-lists/lazy.facts new file mode 100644 index 0000000000..5f30950a11 --- /dev/null +++ b/contrib/lazy-lists/lazy.facts @@ -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 } " 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 } ; diff --git a/contrib/lazy-lists/load.factor b/contrib/lazy-lists/load.factor index 084e73c2fd..382242b0d8 100644 --- a/contrib/lazy-lists/load.factor +++ b/contrib/lazy-lists/load.factor @@ -4,6 +4,8 @@ PROVIDE: contrib/lazy-lists { "lists.factor" "lists.facts" + "lazy.factor" + "lazy.facts" "lazy-io.factor" "lazy-io.facts" "examples.factor"