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

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

Path: ...!news.nobody.at!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: Translating circular Haskell code to lisp
Date: Fri, 30 Aug 2024 17:32:35 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 39
Message-ID: <20240830101143.424@kylheku.com>
References: <vasuce$iv6j$1@dont-email.me>
Injection-Date: Fri, 30 Aug 2024 19:32:35 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="cbe2877523f20dda3b599fd18e2277a3";
	logging-data="622811"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18H2u0Ai7iApixht+W5HRJ7RhN891Qe82U="
User-Agent: slrn/pre1.0.4-9 (Linux)
Cancel-Lock: sha1:qgyROFSZOHf3mIYi575DnAp5Euw=
Bytes: 2195

On 2024-08-30, B. Pym <Nobody447095@here-nor-there.org> wrote:
> Pascal Costanza wrote:
>
>> > I don't need a general purpose transformation, just some guidelines to
>> > follow when I see code like this.
>> 
>> General guideline: Look for a solution that uses LOOP. ;)
>> 
>> (defun diff3 (list)
>>    (let ((avg (loop for element in list
>>                     sum element into sum
>>                     count t into length
>>                     finally (return (/ sum length)))))
>>      (loop for element in list
>>            collect (- element avg))))
>
> Gauche Scheme
>
> (define (diff3 lst)
>   (let ((len 0) (sum 0))
>     (dolist (x lst) (inc! len) (inc! sum x))
>     (map (cute  - <> (/ sum len)) lst)))

The loop algorithm contains no explicitly visible side effects
whereas yours has ugly variable stepping.

Point-free one-liner:

This is the TXR Lisp interactive listener of TXR 296.
Quit with :quit or Ctrl-D on an empty line. Ctrl-X ? for cheatsheet.
TXR kind of supports IEEE 754.00000000000003 floating-point.
1> [[callf mapcar [chain [callf / sum len] (do op - @@1)] identity] '(1
2 3 4 5)]
(2.0 1.0 0.0 -1.0 -2.0)

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