我試圖將一些Haskell代碼轉換爲F#但我遇到了一些麻煩,因爲默認情況下Haskell是懶惰的,而F#不是。我還在學習圍繞F#的方式。下面是Haskell中的多態餘弦函數,具有相當不錯的性能。我想嘗試在F#中保持相同或更好的性能參數。我希望看到F#List版本和F#Seq版本,因爲Seq版本更像是懶惰的Haskell,但List版本可能會表現更好。謝謝你的幫助。將Haskell多態餘弦函數轉換爲F#
效率:算術運算次數使用比例方面的數目串聯
空間:使用常數空間,獨立的條款數的
takeThemTwoByTwo xs =
takeWhile (not . null) [take 2 ys | ys <- iterate (drop 2) xs]
products xss = [product xs | xs <- xss]
pairDifferences xs =
[foldr (-) 0 adjacentPair | adjacentPair <- takeThemTwoByTwo xs]
harmonics x = [x/(fromIntegral k) | k <- [1 ..]]
cosineTerms = scanl (*) 1 . products . takeThemTwoByTwo . harmonics
cosine = foldl (+) 0 . pairDifferences .
take numberOfTerms . cosineTerms
哪個餘弦近似值是?輸入是「度數」還是「弧度」? – pad 2012-01-18 07:16:11
這是弧度。 – 2012-01-18 18:49:14
「相同或更好的性能參數」。如果你關心性能,爲什麼你使用這種算法? – 2012-06-15 12:28:08