составить приведенный список функций - PullRequest
2 голосов
/ 22 сентября 2019

С некоторыми тестовыми процедурами:

#lang racket

(define (foo x) (+ x 1))
(define (bar x) (* x 2))
(define (baz x) (+ x 3))

Я могу "вручную" использовать compose, чтобы получить правильный результат:

((compose foo bar baz) 1)    ;; works

... но есть ли способиспользовать compose со списком?Самое близкое, что я могу получить - это список в кавычках, и я бы предпочел не использовать eval, если мне не нужно.

(define test-funcs '(foo bar baz))
((compose test-funcs) 1)     ;; expected: procedure? given: '(#<procedure:foo> #<procedure:bar> #<procedure:baz>)
((compose . test-funcs) 1)   ;; #%app: bad syntax
`((compose . ,test-funcs) 1) ;; almost: '((compose foo bar baz) 1)

1 Ответ

1 голос
/ 23 сентября 2019

Я знаю два варианта решения такой проблемы:

1) ((apply compose (list foo bar baz)) 1)

2) ((eval `(compose foo bar baz)) 1)

...