1

我已经尝试了 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)))))

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

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

并且以下使用相同 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 被赋予函数列表作为参数,返回相同的列表 st 每个函数都由自身(其索引 + 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)))))
4

1 回答 1

2

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

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

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

于 2012-12-11T14:45:01.797 回答