2013-08-18 9 views
13

私は新たにスカラーで、簡単なスカラーワークシートを渡そうとしました。スカラーエラー:見つからなかった:値

IDEはIntellij IDEAコミュニティエディションであり、OS Ubuntu 12.04、sbtが正しくインストールされています。

しかし、それはエラーがスローされます - これが起こる理由error: not found: value

OIを理解することはできません。

コード:画面の右側から

object session { 
    1 + 2 
    def abs(x: Double) = if (x < 0) -x else x   <== update this line 
    def sqrtIter(guess: Double, x: Double): Double = 
    if (isGoodEnough(guess, x)) guess 
    else sqrtIter(improve(guess, x), x) 

    def isGoodEnough(guess: Double, x: Double) = 
    abs(guess * guess - x) < 0.001 

    def improve(guess: Double, x: Double) = 
    (guess + x/guess)/2 
    def sqrt(x: Double) = sqrtIter(1.0, x) 
    sqrt(2) 
    sqrt(4) 
} 

出力:

> res0: Int = 3 

> <console>:8: error: not found: value isGoodEnough 
      if (isGoodEnough(guess, x)) guess else sqrtIter(improve(guess, x), x) 
       ^
    <console>:8: error: not found: value improve 
      if (isGoodEnough(guess, x)) guess else sqrtIter(improve(guess, x), x) 
                  ^
> <console>:8: error: not found: value abs 
      abs(guess * guess - x) < 0.001 
      ^
> improve: (guess: Double, x: Double)Double 

> <console>:7: error: not found: value sqrtIter 
     def sqrt(x: Double) = sqrtIter(1.0, x) 
          ^ 
> <console>:8: error: not found: value sqrt 
       sqrt(2) 
       ^

> <console>:8: error: not found: value sqrt 
       sqrt(4) 

答えて

15

完全なエラーメッセージはerror: not found: value absです。値 "abs"が見つかりませんでした。あなたはmath.absが欲しいです。あるいは、これらの数学関数が必要となる前に、import math._をどこかに追加することもできます。

+0

おかげで、私は必要なものだけ。反対側では、分かりやすくするためにプログラムが必要とするものだけをインポートする方が好きなので、 "import math.abs"を使用することをお勧めします。 –

0

そして、冗長なコードなしでいくつかの最も簡単な方法:

object session { 
    1 + 2 
    def abs(x: Double) = if (x < 0) -x else x 
    def sqrt(x: Double) = { 

    def sqrtIter(guess: Double): Double = 
    if (isGoodEnough(guess)) guess 
    else sqrtIter(improve(guess)) 

    def isGoodEnough(guess: Double) = 
    abs(guess * guess - x)/x < 0.001 

    def improve(guess: Double) = 
    (guess + x/guess)/2 
    sqrtIter(1.0) 
    } 
    sqrt(2) 
    sqrt(4) 
    sqrt(1e-16) 
    sqrt(1e60) 
} 
2

私はあなたと同じ問題を抱えていました。 math.absの読み込みやmath._の読み込みは、コード内でabsが定義されているので有効ではないと思いました。

私にとっては、関数定義の順序が再編成されました。下で使用できるようにするには、上記の定義が必要です。

object session { 
    def abs(x: Double) = if (x<0) - x else x 

    def isGoodEnough(guess: Double, x: Double) = 
    abs(guess * guess - x) < 0.001 

    def improve(guess: Double, x: Double) = 
    (guess + x/guess)/2 
    def sqrtIter(guess: Double, x: Double): Double = 
    if(isGoodEnough(guess, x)) guess 
    else sqrtIter(improve(guess, x), x) 


    def sqrt(x: Double) = { sqrtIter(1.0, x) } 

    sqrt(2) 
    sqrt(4) 
} 

が返さ:

> abs: (x: Double)Double 


> isGoodEnough: (guess: Double, x: Double)Boolean 


> improve: (guess: Double, x: Double)Double 


> sqrtIter: (guess: Double, x: Double)Double 


> sqrt: (x: Double)Double 



> res0: Double = 1.4142156862745097 
> res1: Double = 2.0000000929222947 
関連する問題