| Deutsch English Français Italiano |
|
<102vcoa$3dbeg$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: "B. Pym" <Nobody447095@here-nor-there.org>
Newsgroups: comp.lang.lisp
Subject: Re: Illegal LOOP usage?
Date: Wed, 18 Jun 2025 21:57:34 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 43
Message-ID: <102vcoa$3dbeg$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Injection-Date: Wed, 18 Jun 2025 23:57:34 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="faeb3e276463c6d792453c53fb61f4b5";
logging-data="3583440"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/xzXNPKxurQrnvVs4g882N"
User-Agent: XanaNews/1.18.1.6
Cancel-Lock: sha1:ZQtZQDcnE1eDHxcbSzcnHiBvtLM=
Edi Weitz wrote:
> So, this function from Drakma
>
> (defun split-string (string &optional (separators " ,-"))
> "Splits STRING into substrings separated by the characters in the
> sequence SEPARATORS. Empty substrings aren't collected."
> (loop for char across string
> when (find char separators :test #'char=)
> when collector
> collect (coerce collector 'string) into result
> and do (setq collector nil) end
> else
> collect char into collector
> finally (return (if collector
> (append result (list (coerce collector 'string)))
> result))))
>
> works as intended with LispWorks, but doesn't work with AllegroCL or
> SBCL. It seems the latter two simply ignore the (SETQ COLLECTOR NIL)
> form. My guess is that the code above is somehow incorrect in that it
> modifies a variable which is used in a "collect ... into ..." clause,
> but I couldn't find anything in the CLHS that explicitly says so.
>
> Any hints?
Gauche Scheme
(use srfi-13) ;; string-tokenize
(use srfi-14) ;; character sets
(define (split-string strng :optional (separators " ,-"))
(define good-chars
(char-set-complement (string->char-set separators)))
(string-tokenize strng good-chars))
(split-string " foo bar-baz--zoo,,sooth,,,")
===>
("foo" "bar" "baz" "zoo" "sooth")
(split-string " foo bar-baz--zoo,,sooth,,," " o")
===>
("f" "bar-baz--z" ",,s" "th,,,")