方案功能定义怎么做

时间:2019-03-03 20:22:34

标签: scheme

使用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)))

这是我到目前为止所拥有的。但这给了我一个错误,说违反合同。我是新手,无法找出错误。有人可以查看我的代码吗?谢谢。

1 个答案:

答案 0 :(得分:1)

我相信您在错误的地方使用了函数组合。事实是,您根本不需要...

(define (pos-cos x)
  (if (< (cos x) 0)
      (- (cos x))
      (cos x)))

但是好吧-只是为了满足某些任意要求,我们可以组成abscos来取x余弦结果的绝对值,这等效于{我们以前有{1}}个表达式:

if

注意第二行开头的双括号吗?那很重要!请记住,当我们应用(define (pos-cos x) ((comp abs cos) x)) 时,它将返回一个新的comp,我们必须再次将其应用于lambda才能获得预期的结果。