Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: "B. Pym" Newsgroups: comp.lang.lisp,comp.lang.scheme Subject: Haskell Date: Sat, 31 Aug 2024 07:09:04 -0000 (UTC) Organization: A noiseless patient Spider Lines: 40 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Injection-Date: Sat, 31 Aug 2024 09:09:05 +0200 (CEST) Injection-Info: dont-email.me; posting-host="cd5bad8e55b4aa82d833cd99ecb8f893"; logging-data="985916"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19jEJ0NBK43BzjmiBcko8lZ" User-Agent: XanaNews/1.18.1.6 Cancel-Lock: sha1:s4ZanRBqbqpFFoiyEuvum/Jfk6Q= Bytes: 1819 Frank Buss wrote: > Barry Margolin wrote: > > Which reminds me, where's the obligatory Haskell response? > > No problem :-) > > Assuming this is what was intended by the OP: > > (let (res) > (dotimes (i 11 (nreverse res)) > (dotimes (j 11) > (push (+ i j) res)))) > > This is a solution in Haskell: > > [x + y | x <- [0..10], y <- [0..10]] > It's shorter in Gauche Scheme than in Haskell. (use srfi-42) ; list-ec (list-ec (: x 11) (: y 11) (+ x y)) Can it be done with a single "do*"? (do* ((r '()) (j 0 (mod (+ j 1) 11)) (i 0 (if (zero? j) (+ 1 i) i))) ((= 11 i) (reverse r)) (push! r (+ i j))) (0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 11 2 3 4 5 6 7 8 9 10 11 12 3 4 5 6 7 8 9 10 11 12 13 4 5 6 7 8 9 10 11 12 13 14 5 6 7 8 9 10 11 12 13 14 15 6 7 8 9 10 11 12 13 14 15 16 7 8 9 10 11 12 13 14 15 16 17 8 9 10 11 12 13 14 15 16 17 18 9 10 11 12 13 14 15 16 17 18 19 10 11 12 13 14 15 16 17 18 19 20)