2011-09-13 28 views
1

私はscalaを使い慣れていないので、このコードが私にこのエラーを与える理由を混乱させる。エラー:タイプの不一致。見つかった:(Int、Int)=> Int必須:Int

def div(m: Int, n: Int, i: Int): Int = { 
    (m: Int, n: Int) => 
    if ((m - n) <= 0) 
     return i 
    else 
     div((m-n), n, (i+1)) 
} 

ヘルプありがとうございます。

+0

_Offtopic._答えに[format](http://stackoverflow.com/editing-help#syntax-highlighting)コードを忘れないでください。これは、コード例を読みにくい2番目の質問です。 –

+1

申し訳ありませんが、それはフォーマットで意味されていたことを認識していない、私は次回に注意してください。 – Zul

+1

'return'は超過りですね。 –

答えて

4

宣言しているように、Intではなく関数を返すようです。

は、あなたが何をしようとして、このです:

def div(m: Int, n: Int, i: Int): Int = if ((m - n) <= 0) return i else div((m-n), n, (i+1)) 
+0

私はそれが私が試みていたものだと思います。冗長であるように見えましたが、私が試していた本はそのフォーマットでそれをしました。助けてくれてありがとう! – Zul

3

(x: A) => y: BはタイプA => Bの無名関数を意味し、その中括弧の間にあなたが持っている表現は、関数(Int, Int) => Intであり、それが返されるものです。

0

キーワード、括弧、および全体(m:Int、n:Int)=> - 部分という、非常に多くの超巨大なものを使用します。

def div (m: Int, n: Int, count: Int): Int = 
    if ((m - n) <= 0) count else div (m - n, n, count + 1) 

あなたは試合を使用したい場合、あなたはそれをこのように行うことができます:

def div (m: Int, n: Int, count: Int = 1): Int = (m - n) match { 
    case (diff: Int) if (diff <= 0) => count 
    case _ => div (m - n, n, count + 1) } 

を(数= 1のデフォルト引数に注意してください)。 m、n、iは私の味のためにちょっとした名前の変数です。 countの下には、nominator, denominatorが適合します。

しかし、implentationは私が期待する

(0 to 2).map (x => div (14+x, 5, 1)) 
res61: scala.collection.immutable.IndexedSeq[Int] = Vector(3, 3, 4) 

を返します(2、3、3) - あなたが反対方向に丸めます。

if ((m - n) < 0) i-1 else ... 

コンパレータの変更とi-1(count-1)の返り値を修正します。

ただし、これは0と負の値を含む値の場合はテストセットではありません。

関連する問題