真的不是程序吗?

时间:2012-12-11 14:41:28

标签: if-statement scheme

我一直在努力解决这个问题2个小时吧!请考虑以下代码:

(define (PowListF list) 
  (PowListFHelp list (- (length list) 1)))

(define (FuncPow f n) 
  (if (= 0 n)
      f
      (lambda (x)
        (FuncPow (f (- n 1)) x))))

(define (PowListFHelp list n) 
  (if (= n 0)
      (list (list-ref list 0))
      (cons (FuncPow (list-ref list n) n)
            (PowListFHelp list (- n 1)))))

火箭计划编译器给我错误: 申请:不是程序;  期望一个可以应用于参数的过程   给出:(##)   参数...:    #

它指向(缺点部分......

和以下使用相同if结构的代码可以正常工作:

(define (polyCheb n)
  (reverse (polyChebHelp n)))

(define (polyChebHelp n)
  (if (= n 0)
      (list (polyChebFunc n))
      (cons (polyChebFunc n)
            (polyChebHelp (- n 1)))))

(define (polyChebFunc n)
  (if (= n 0)
      (lambda (x) 1)
      (if (= n 1) 
          (lambda (x) x)     
          (lambda (x)
            (- (* (* 2 x)
                  ((polyChebFunc(- n 1)) x))
               ((polyChebFunc(- n 2)) x))))))
编辑:PowListF被赋予函数列表作为参数,返回相同的列表s.t每个函数都由自己组成(其索引+ 1)次...

用法: ((list-ref(PowListF(list(lambda(x)x)(lambda(x)(expt x 2))))1)2) 值应为2 ^ 2 ^ 2 = 2 ^ 4 = 16

编辑2:

这是解决方案:

(define (FuncPow f n) 
  (if (= 0 n)
      f
      (lambda (x) (f ((FuncPow f (- n 1)) x)))))

1 个答案:

答案 0 :(得分:2)

问题在于:(FuncPow(f (- n 1)) x)

调用f的结果必须是过程(我假设你返回一个过程)。

您进一步将“f分配为:(list-ref list n)