使用comp定义pos-cos函数:
pos-cos(x) =
cos(x) if cos(x) ≥ 0 else
−cos(x) if cos(x) < 0
(define (comp f g)
(lambda (x) (f (g x))))
(define (pos-cos x)
(if (< (comp (cos x) x) 0)
(* -1 (cos x))
(cos x)))
这是我到目前为止所拥有的。但这给了我一个错误,说违反合同。我是新手,无法找出错误。有人可以查看我的代码吗?谢谢。
答案 0 :(得分:1)
我相信您在错误的地方使用了函数组合。事实是,您根本不需要...
(define (pos-cos x)
(if (< (cos x) 0)
(- (cos x))
(cos x)))
但是好吧-只是为了满足某些任意要求,我们可以组成abs
和cos
来取x
余弦结果的绝对值,这等效于{我们以前有{1}}个表达式:
if
注意第二行开头的双括号吗?那很重要!请记住,当我们应用(define (pos-cos x)
((comp abs cos) x))
时,它将返回一个新的comp
,我们必须再次将其应用于lambda
才能获得预期的结果。