我了解 Haskell 语法。
我想咖喱(部分应用)一个名为“play-note”的函数,并“手动”传递一个参数,第二个参数带有地图。
如果我可以用 Haskell 编写它,我会说:
playNote :: Time -> Instrument -> Int -> Int -> Int -> Int -> Music -- made up, but just to give you an idea
notes = [46, 47, 35, 74]
loopGo = True
loop time = do mapM_ (playNote' time) notes
if loopGo then (loop (time+(second/2))) else return () -- time element removed
playNote' time pitch = playNote time drums pitch 80 11025 9 -- ignore extra args
在 Scheme 中,这是我所拥有的最好的:
(define notes '(46 47 35 74))
(define *loop-go* #t)
(define play-note-prime
(lambda (time2)
(lambda (pitch)
(play-note time2 drums pitch 80 11025 9)))) ; drums is another variable
(define loop
(lambda (time)
(map (play-note-prime time) notes)
(if *loop-go*
(callback (+ time (/ *second* 2)) 'loop (+ time (/ second 2)))))) ; time element is more sophisticated here
Scheme 版本“编译”,但没有按照我的预期做(咖喱第一个参数,然后是第二个)。帮助?谢谢!
编辑:
我的问题的本质是无法定义一个接受两个参数的函数,以使以下代码产生正确的结果:
map ({some function} {some value; argument 1}) {some list; each element will be an argument 2}