Список функций - PullRequest
       10

Список функций

2 голосов
/ 25 декабря 2009

Есть ли способ составить список, содержащий функции? Я пытаюсь создать список некоторых арифметических операторов (+ - * /), чтобы я мог легко управлять их порядком и применять их к списку чисел.

Итак, если бы у меня был этот список, я бы использовал его так:

(apply (map (lambda (x)
              x)
            '(+ - * /))
       '(1 2 3 4))

Я начинающий программист, поэтому, если есть лучший способ сделать такую ​​операцию, ваш совет очень ценится.

Ответы [ 2 ]

10 голосов
/ 25 декабря 2009

Списки создаются с помощью функции LIST.

(list 1 2 3)

(list + - * /)

Применение списка символов не имеет смысла:

(apply (map (lambda (x) x) '(+ - * /)) '(1 2 3 4))

Было бы (применение списка функций по-прежнему не имеет смысла):

(apply (map (lambda (x) x) (list + - * /)) '(1 2 3 4))

Упрощено (все еще неправильно):

(apply (list + - * /) '(1 2 3 4))

Но, может быть, вы хотели это:

(map (lambda (f)
       (apply f '(1 2 3 4)))
     (list + - * /))

В Common Lisp:

(mapcar #'(lambda (f)
            (apply f '(1 2 3 4)))
        (list #'+ #'- #'* #'/))

Возвращает:

(10 -8 24 1/24)
2 голосов
/ 30 декабря 2009

Я удивлен, что никто не упомянул квазиквотацию . :-) На схеме можно сказать:

`(,+ ,- ,* ,/)

или в Common Lisp:

`(,#'+ ,#'- ,#'* ,#'/)

В некоторых случаях, особенно при использовании сложных списков, квазиквотация делает код намного проще для чтения, чем соответствующая list версия.

...