Sujet : Re: Given string 'a.bc.' -- replace each dot(.) with 0 or 1
De : 643-408-1753 (at) *nospam* kylheku.com (Kaz Kylheku)
Groupes : comp.lang.lispDate : 18. May 2024, 23:06:16
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <20240518140005.921@kylheku.com>
References : 1
User-Agent : slrn/pre1.0.4-9 (Linux)
On 2024-05-18, HenHanna <
HenHanna@devnull.tb> wrote:
>
How can i write this function simply? (in Common Lisp)
>
-- Given a string 'a.bc.' -- replace each dot(.) with 0 or 1.
>
-- So the value is a list of 4 strings:
('a0bc0' 'a0bc1' 'a1bc0' 'a1bc1')
>
-- The order is not important.
If the string has 3 dots, the value is a list of length 8.
>
If the program is going to be simpler,
pls use, e.g. (a $ b c $) rather than 'a.bc.'
TXR Lisp:
(defun bindots (str)
(let* ((s (copy str))
(ixs (where (op eql #\.) s))
(n (len ixs)))
(collect-each ((digs (rperm '(#\0 #\1) n)))
(set [s ixs] digs)
(copy s))))
1> (bindots "abc")
("abc")
2> (bindots "a.bc")
("a0bc" "a1bc")
3> (bindots "a.b.c")
("a0b0c" "a0b1c" "a1b0c" "a1b1c")
4> (bindots "a.b.cd.e")
("a0b0cd0e" "a0b0cd1e" "a0b1cd0e" "a0b1cd1e" "a1b0cd0e" "a1b0cd1e"
"a1b1cd0e" "a1b1cd1e")
-- TXR Programming Language: http://nongnu.org/txrCygnal: Cygwin Native Application Library: http://kylheku.com/cygnalMastodon: @Kazinator@mstdn.ca