0

我想提出一個簡單的函數,以整數的功能,列表和應用功能上的每個整數列表 -斯卡拉`應用程序並不需要parameters`編譯錯誤

def IntOps(f: Int => Int)(values: List[Int]): Int = { 
    if(values.isEmpty) 0 
    //Getting "Application does not take parameters" in values.tail 
    else IntOps(f(values.head)(values.tail)) 
    } 
    IntOps(x=> x+x)(List(1, 2, 30) 

我我在values.tail上得到了一個編譯器錯誤Application does not take parameters,我對函數式編程和scala都是初學者,所以任何能夠理解這一點的指針或答案都會很棒。

+0

我得到「'Int'不帶參數」 – pedrofurla

+1

IntOps應該做什麼?我看不到如何使用函數Int => Int將List [Int]轉換爲Int。 – pedrofurla

回答

2

這行代碼有兩個問題。

IntOps(f(values.head)(values.tail)) 
  1. 對不按括號 - IntOps需要兩個參數列表,在每一個參數。
  2. 錯誤類型的第一個參數的 - 的第一個參數必須是一個功能Int => Int,這是什麼f是,但你調用f,它返回一個Int,這不是什麼IntOps需要。
+0

謝謝,這很清楚..有沒有一種方法可以解決問題#2沒有內部函數或匿名函數? –

+0

嗯,這並不完全清楚你想要做什麼。如果你想要的結果是一個帶有新值的列表,那麼'IntOps'需要返回'List [Int]'而不是'Int',並且你必須包含**構建新列表的代碼**。如果你想把輸入列表減少到一個'Int',那麼除了別的以外,你需要一個接收到的函數f,它需要2個參數。其中一個參數是當前列表元素,另一個參數是遞歸調用「IntOps」的結果。 – jwvh

+0

你的答案幫助我解決了這個問題的內部函數,在這裏https://gist.github.com/gocoolgeek/8369568e514c708990a68a880c8a4951 ..只是想嘗試看看我是否可以擺脫'Ops'功能 –