
From:  Hans Aberg 
Subject:  Re: List functions 
Date:  Fri, 3 Dec 2010 16:06:03 +0100 
On 1 Dec 2010, at 22:34, Keith Wright wrote:
One can set the constants to functions that evaluate to themselves. One use would be expressions like (1 + f)(x). The () just shows up in the context above.I didn't really follow that, but in seems that you want to be able to apply a list of functions to a single argument, and get a list of the results of applying each function separately to the same argument. guile> (define (fmap fs x) (if (null? fs) '() (cons (apply (car fs) (list x)) (fmap (cdr fs) x) ))) guile> (fmap (list sin cos) 2) (0.909297426825682 0.416146836547142)
If I extend your function to one of pairs and nonpairs as well, then () becomes naturally a constant:
(define (fmap fs x) (if (null? fs) '() (if (not (pair? fs)) (apply fs (list x)) (cons (fmap (car fs) x) (fmap (cdr fs) x))))) Then (fmap sqrt 2) > 1.4142135623731 (fmap (list sin cos) 2) > (0.909297426825682 0.416146836547142) (fmap (cons sin cos) 2) > (0.909297426825682 . 0.416146836547142) But also (fmap (list) 2) > ()So this acts essentially as an extension of the evaluator, if all expressions (f x1 ...) are replaced by (fmap f x1 ...).
[Prev in Thread]  Current Thread  [Next in Thread] 