Sujet : Re: applying macros
De : Nobody447095 (at) *nospam* here-nor-there.org (B. Pym)
Groupes : comp.lang.lisp comp.lang.schemeDate : 19. Sep 2024, 10:45:16
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vcgoan$gn8h$1@dont-email.me>
References : 1
User-Agent : XanaNews/1.18.1.6
B. Pym wrote:
Rainer Joswig wrote:
(defun average-function (list)
(assert list (list)
"List should not be empty.")
(loop for i from 0
for item in list
sum item into result
finally (return (/ result i))))
It's shorter in Gauche Scheme.
(define (average-function lst)
(let1 n 0
(/ (fold (lambda (x sum) (inc! n) (+ x sum)) 0 lst)
n)))
Another way.
(define (average-function lst)
(let1 n 0
(/ (@ fold x sum : (inc! n) (+ x sum) : 0 lst)
n)))
Given:
(define-syntax @-aux
(syntax-rules (:)
;; No parameters given; use "cut".
[(_ func () ((e0 e ...)) : stuff ...)
(func (cut e0 e ...) stuff ...)]
[(_ func vars (e0 e ...) : stuff ...)
(func (lambda vars e0 e ...) stuff ...)]
[(_ func vars (e0 e ...) expr more ...)
(@-aux func vars (e0 e ... expr) more ...)]
[(_ func vars () : expr more ...)
(@-aux func vars (expr) more ...)]
[(_ func (vars ...) () var more ...)
(@-aux func (vars ... var) () more ...)]))
(define-syntax @
(syntax-rules ()
[(_ func stuff ...)
(@-aux func () () stuff ...)]))