2012-03-24 8 views
3
let impfac i = 
    let l = ref i in 
    let result = ref 1 in 
    let k = ref 2 in 
    while !k < !l do 
    result := !result * !k 
     k:=!k+1 
    done; 
    !result 

エラーメッセージは次のとおりです。ocamlの階乗関数のこの必須のバージョンで何が問題になっていますか?

let impfac i = 
    let l = ref i in 
    let result = ref 1 in 
    let k = ref 2 in 
    while !k < !l do 
    result := !result * !k 
     k:=!k+1 
    done; 
    !result;; 
       Characters 121-123: 
     result := !result * !k 
          ^^ 
Error: This expression is not a function; it cannot be applied 
# 

答えて

7
result := !result * !k 
    k:=!k+1 

あなたが最初の行の末尾にセミコロンを逃しています。それは次のように読まれる本のため、次

result := !result * (!k k:=!k+1) 

すなわち、それはあなたがその引数としてk:=!k+1!kを呼び出すようにしようとしていると考えています。

これは、編集者がその上の行より右にk := !k+1の行をインデントした理由です。これは構文に何か間違っているという最初の兆候だったはずです。

+0

完璧!問題が解決しました!!!ご協力いただきありがとうございます!!!私はインデントのヒントが大好き! – lkahtz

関連する問題