给出给定的功能列表

时间:2019-09-22 17:03:18

标签: racket

通过一些测试程序:

#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 个答案:

答案 0 :(得分:1)

我知道两种解决此问题的方法:

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

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