| Deutsch English Français Italiano |
|
<v7lnfg$lsag$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: "B. Pym" <Nobody447095@here-nor-there.org>
Newsgroups: comp.lang.forth
Subject: Re: the FMITE processor
Date: Mon, 22 Jul 2024 13:40:07 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 118
Message-ID: <v7lnfg$lsag$1@dont-email.me>
References: <v6ks5r$1o52f$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Mon, 22 Jul 2024 15:40:07 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="daacc4272803ca921008e0762ddc3b22";
logging-data="717136"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19tt8BbIMyer4xqk4ZY2Z1T"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:Y/0pYsf/x69rKBfZyPPMkWuNvNQ=
Bytes: 3420
B. Pym wrote:
> hughag...@gmail.com wrote:
>
> > There is no good reason to execute a lambda function after the
> > parent function has gone out of scope.
>
> The original poster was so ignorant that he knew nothing
> whatsoever about Usenet; in fact, he may not have known that
> he was posting to Usenet. Consequently, each paragraph in
> his post was one gigantic line. I broke his line for him.
>
> In this and other posts he has provided evidence that he
> is ignorant about higher-level languages and higher-level
> programming concepts. In fact, he has shown that he finds
> high-level concepts difficult or impossible to grasp.
>
>
>
> (define (make-fib-gen)
> (let ((a 1) (b 1))
> (lambda ()
> (begin0 a
> (set!-values (a b) (values b (+ a b)))))))
>
> (define fib0 (make-fib-gen))
> (define fib1 (make-fib-gen))
>
> (do ((i 5 (- i 1))) ((zero? i))
> (display (fib0)) (display " "))
>
> ===>
> 1 1 2 3 5
>
> (do ((i 6 (- i 1)))
> ((zero? i))
> (display (list (fib0) (fib1)))
> (newline))
>
> ===>
> (8 1)
> (13 1)
> (21 2)
> (34 3)
> (55 5)
> (89 8)
>
>
> (define (make-accumulator)
> (let ((accum '()))
> (lambda xs
> (if (null? xs)
> (reverse accum)
> (set! accum (cons (car xs) accum))))))
>
> (define odds (make-accumulator))
> (define evens (make-accumulator))
> (define all (make-accumulator))
>
> (do ((i 9 (- i 1)))
> ((zero? i) (values (all) (odds) (evens)))
> (let ((n (fib1)))
> ((if (odd? n) odds evens) n)
> (all n)))
>
> ===>
> (13 21 34 55 89 144 233 377 610)
> (13 21 55 89 233 377)
> (34 144 610)
>
> In Forth?
Gauche Scheme
(use srfi-13) ;; string ops.
(use gauche.generator)
(define (white-space? c) (member c '(#\space #\tab)))
(define (make-token-generator str)
(let ((str str)
(start 0)
(end 0))
(lambda ()
(set! start
(and start end (string-skip str white-space? end)))
(if start
(begin
(set! end (string-index str white-space? start))
(string-copy str start end))
(eof-object)))))
(define (split-on-space str)
(generator->list (make-token-generator str)))
(split-on-space "")
===>
()
(split-on-space " ")
===>
()
(split-on-space "foo")
===>
("foo")
(split-on-space " foo ")
===>
("foo")
(split-on-space " foo bar ")
===>
("foo" "bar")
(split-on-space " 3.14 foo? [bar] ")
===>
("3.14" "foo?" "[bar]")