延续传递风格 - 功能组合
我正在学习使用Racket的CPS,我已经设法编写了这些函数:
;lift a regular single-arg function into CPS
(define (lift/k f)
(lambda (x k)
(k (f x))))
;compose two CPS functions
(define (compose/k f g)
(lambda (x k)
(g x (lambda (y)
(f y k)))))
他们似乎工作正常
(define (is-two/k x k)
(k (= x 2)))
(define is-not-two/k (compose/k (lift/k not) is-two/k))
(is-not-two/k 3 display)
(is-not-two/k 2 display)
#t#f
我想知道这些功能是否仍然是“真正的CPS”。我是否搞砸了“真正的”继续传递这些功能?在CPS中使用函数组合技术是犹太的吗?是鼓励吗?或者它会被视为“妥协”吗?是否有更多的CPS-y方式来做到这一点?
是的我知道我刚问了5个问题,但是他们背后的基本思想(我不确定我是否正确理解)是一样的。其他Lisps,Haskell,Erlang或其他函数式语言的解释都很好。
没有找到相关结果
已邀请:
1 个回复
青董据零