[英]Generic F# function
我是 F# 的新手,我需要編寫一個接受任何類型變量的求冪 function。
let exp value pow =
let mutable result = 1.0
for i = 1 to abs pow do
result <- value * result
if pow > 0 then result else 1.0 / result
let rec quickExp value pow =
let result =
if pow = 0 then
1.0
else
let half = quickExp value (abs pow / 2)
if pow % 2 = 0 then half * half else value * half * half
if pow > 0 then result else 1.0 / result
試過內聯,但它不適用於遞歸。 我將不勝感激任何幫助!
你需要兩個技巧來讓它工作:
inline
的內部遞歸 function 並將外部 function 標記為inline
1.0
,它將類型限制為float
到LanguagePrimitives.GenericOne
,這是(顧名思義)通用 1 值以下似乎對我有用:
let inline quickExp (value:^a) (pow:int) : ^a =
let rec loop pow =
let result : ^a =
if pow = 0 then
LanguagePrimitives.GenericOne
else
let half = loop (abs pow / 2)
if pow % 2 = 0 then half * half else value * half * half
if pow > 0 then result else LanguagePrimitives.GenericOne / result
loop pow
quickExp 2.0 2
quickExp 2 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.