Deutsch   English   Français   Italiano  
<20240913182544.67@kylheku.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!2.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Kaz Kylheku <643-408-1753@kylheku.com>
Newsgroups: comp.lang.lisp,comp.lang.scheme
Subject: Re: case and quoted keys - a misunderstanding
Date: Sat, 14 Sep 2024 16:38:54 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 77
Message-ID: <20240913182544.67@kylheku.com>
References: <vc2g56$12ukb$1@dont-email.me>
Injection-Date: Sat, 14 Sep 2024 18:38:54 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="70215a4d804215b5dfff445270e300c7";
	logging-data="1658795"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19XH7my1w0vftVH/jzWa3/CPf4uY8NM5A0="
User-Agent: slrn/pre1.0.4-9 (Linux)
Cancel-Lock: sha1:V7vv75Mjt5G4AQp5l9QkBRHtztQ=
Bytes: 2848

On 2024-09-13, B. Pym <Nobody447095@here-nor-there.org> wrote:
> Frode Vatvedt Fjeld wrote:
>
>> > (defun read-to-char (c stream)
>> >   (let ((x (read-char stream nil)))
>> >     (cond ((null x)         nil)
>> >           ((char= x c)      t)
>> >           (t                (read-to-char c stream)))))
>> >
>> > This isn't much worse looking then the obvious iterative solutions.
>> 
>> ..only it has Scheme written all over it ;-) In Common Lisp this is
>> spelled as
>> 
>>   (defun read-to-char (c stream)
>>     (loop for x = (read-char stream nil)
>>        while x do (when (char= x c) (return t))))
>
> It's shorter in Gauche Scheme:
>
> (use srfi-42) ;; first-ec
>
> (define (read-to-char c port)
>   (first-ec #f
>     (:port x port read-char)
>     (if (char=? x c))
>     #t))
>
> Testing.
>
> (call-with-input-string "foo-Frodo is foolish."
>   (lambda (in)  (read-to-char #\- in)
>     (read-line in)))
>  ===>
> "Frodo is foolish."
>
> Shorter yet:

What, that is longer?

> (use srfi-121) ; generators
>
> (define (read-to-char c port)
>   (generator-find (is c) (cut  read-char port)))
>
> Given:
>
> (define-syntax is
>   (syntax-rules ()
>     [(is x)
>      (lambda (y) (equal? y x))]
>     [(is compare x)
>      (lambda (y) (compare y x))]
>     [(is key compare x)
>      (lambda (y) (compare (key y) x))]))

The "Given:" has to count as part of the length of the solution.

Otherwiwse, we can just say:

  " Shorter yet:
 
    ;; nothing

    Given:

    (define (read-to-char c port) ...) "

If you can factor out any aspect of your solution into macros
and functions which don't count toward its size, then you just
do that with the function you are supposed to write, and 
the solution has zero size.

-- 
TXR Programming Language: http://nongnu.org/txr
Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal
Mastodon: @Kazinator@mstdn.ca