[plt-scheme] v4 questions
Mark Engelberg writes:
> I've been looking through the preview reference:
> http://pre.plt-scheme.org/docs/html/reference/index.html for v4.0, and
> have a few comments/questions.
>
> 1. Why no streams? Wouldn't it be nice to have a solid stream
> implementation with namings that are consistent with the PLTScheme
> list functions, and integrated into the comprehension syntax, i.e.,
> for/stream ? Please consider this...
I kind of agree, but this would also be pretty simple to do as a
PLaneT package. Here's a start:
(require srfi/40)
(require scheme/control)
(define-syntax (for/stream stx)
(syntax-case stx ()
((_ (clause ...) body0 body1 ...)
#`(let loop ((pos (prompt
(begin
(for/fold/derived #,stx () (clause ...)
(control k (cons k (begin body0 body1 ...))))
#f))))
(if pos
(stream-cons (cdr pos) (loop (prompt ((car pos)))))
stream-null)))))
(define (in-stream s)
(make-do-sequence
(lambda ()
(values stream-car stream-cdr s stream-pair? void void))))
> (for/list ((x (in-stream (for/stream ((x '(1 2 3))) x)))) x)
(1 2 3)
It would be nice if "sequence?" returned true for streams, though.
I don't see any way to do that currently.
> 4. I noticed that the built-in list functions and string functions are
> a tiny bit beefier than v372, but still fall short from the more
> complete SRFI implementations. I hope that it will be extremely easy
> to bring in the missing functions without conflict. In v372 it's a
> bit awkward to get a full suite of string and list functions because
> of conflicts.
As of a week or two ago, you can do the following and not get any
conflicts:
#lang scheme
(require srfi/1)
(require srfi/13)
In other words, extremely easy!
> 6. It would be nice if assoc and its kin could take an optional
> default lookup value, like hash-table-get.
Unlike hash-table-get, assoc returns the whole association, i.e. the
key/value pair, instead of just the value. What you want is alist-get:
(define (alist-get alist key (default #f))
(let ((pair (assoc key alist)))
(if pair (cdr pair) default)))
--dougorleans at gmail.com