2017-04-13 10 views
0

に適用:数xと係数のリストとは、その結果を返す多項式1 + 2 +⋯+これは私の関数である第一引数

. Type Checker: type mismatch 
    expected: Integer 
    given: Number in: n 
> 
:私は以下のエラーを取得する

(: compute-poly : Number (Listof Number) -> Number) 
(define (compute-poly x numlist) 
    (: compute-poly-tail : Number (Listof Number) Number Number -> Number) 
    (define (compute-poly-tail xn list n acc) 
    (if (null? list) acc 
    (compute-poly-tail (first list) (rest list) (+ acc (* (first list) (expt xn n))) (+ n 1)))) 
    (compute-poly-tail x numlist 0 0)) 

答えて

0

このプログラムバージョン6.7上のエラーなし

#lang typed/racket 

(: compute-poly : Number (Listof Number) -> Number) 
(define (compute-poly x numlist) 
    (: compute-poly-tail : Number (Listof Number) Number Number -> Number) 
    (define (compute-poly-tail xn list n acc) 
    (if (null? list) acc 
    (compute-poly-tail (first list) (rest list) (+ acc (* (first list) (expt xn n))) (+ n 1)))) 
    (compute-poly-tail x numlist 0 0)) 

実行されます。

どのバージョンをお使いですか?

0

あなたが持っている6行目では二つの問題があります

(compute-poly-tail (first list) ... (+ acc (* (first list) (expt xn n))) (+ n 1)))) 

まず、あなたはあなたの再帰呼び出しに(first list)xnを交換しました。 xが追加される各用語で使用されるので、あなたが持つ必要があるのは、再帰呼び出しごとに(compute-poly-tail xn ...)です。

第2に、この関数の最後の2つの引数の順序は(compute-poly-tail ... n acc)です。したがって、再帰呼び出しでは、最後の2つの引数を定義引数の順序に対応するように再配置する必要があります。

だから、ライン6はなるはずです:

(compute-poly-tail xn ... (+ n 1) (+ acc (* (first list) (expt xn n)))))) 

ここではサンプルのリビジョンです:

(: compute-poly (-> Number (Listof Number) Number Number)) 
(define (compute-poly x lst n) 
    (if (null? lst) 
     0 
     (+ (* (car lst) (expt x n)) 
     (compute-poly x (cdr lst) (add1 n))))) 

、その後、

> (compute-poly 1 '(1 2 3 4 5) 0) 
- : Number 
15 
関連する問題