组合给定函数列表
compose given a list of functions
加上一些测试程序:
#lang racket
(define (foo x) (+ x 1))
(define (bar x) (* x 2))
(define (baz x) (+ x 3))
我可以"manually"使用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) ((apply compose (list foo bar baz)) 1)
2) ((eval `(compose foo bar baz)) 1)
加上一些测试程序:
#lang racket
(define (foo x) (+ x 1))
(define (bar x) (* x 2))
(define (baz x) (+ x 3))
我可以"manually"使用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) ((apply compose (list foo bar baz)) 1)
2) ((eval `(compose foo bar baz)) 1)