簡體   English   中英

通用 F# function

[英]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 ,它將類型限制為floatLanguagePrimitives.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM