[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: List functions

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.

(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 non-pairs 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)))))

  (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 ...).

reply via email to

[Prev in Thread] Current Thread [Next in Thread]