更先進的數學最近,我(終於)使用Scala的數字特徵,這沒有奇蹟開始。例如:與Scala的數字和小數
def square[A](x: A)(implicit num: Numeric[A]): A = num.times(x, x)
現在我能夠勇敢地正視任意數量的是它Double
,Integer
,BigDecimal
,或什麼不是。但是如果我想要做更高級的數學呢?例如,我的logistic function爲Double
數字看起來是這樣的:
def logisticFunction(x: Double): Double = 1.0/(1.0 + math.exp(-x))
我能做的增加,容易分割(我只需要使用特質Fractional
代替Numeric
),但什麼指數?我當然不想寫我自己的exp
函數(或任何採用Double
參數的任意函數)。
所以,我的問題是這樣的:我如何將我的A
轉換爲Double
,按照我的數學,然後轉換回A
。它甚至有可能嗎?
編輯:
這是我的函數的簽名應該如何看起來像:
def logisticFunction[A](x: A)(implicit num: Fractional[A]): A =
/* Magic happens here */
我已經想通了部分有關轉換翻一番,這是因爲num.toDouble(x)
一樣容易。然而,轉換回A
的問題依然存在。
的logisticFunction是永遠不會返回A的有效成員,例如,整數,所以不,我不明白它是如何可能的,除非你想開始使用它作爲部分應用函數,並修改它以匹配函數的有效數字類型。 – Shadowlands
'導入Numeric.Implicits._'並寫入'x * x'而不是'num.times(x,x)'。 –
對不起,很顯然,但我假設在這裏工作有更復雜的應用程序?爲什麼你會使用數字來編寫這些函數?它們有多簡單?我這樣說是因爲說實話,你想避免日常使用的Scala的大部分特性,請相信我這些很多功能,如隱含在強大的金融系統中沒有地位。 –