簡體   English   中英

我如何將這個 Haskell 翻譯成 F#?

[英]How do I translate this Haskell to F#?

我試圖通過翻譯我很久以前寫的一些 Haskell 代碼來學習 F#,但我被卡住了!

percent       :: Int -> Int -> Float
percent a b    = (fromInt a / fromInt b) * 100

freqs         :: String -> [Float]
freqs ws       = [percent (count x ws) (lowers ws) | x <- ['a' .. 'z']]

我已經做到了:

let percent a b = (float a / float b) * 100.

雖然我不喜歡必須擁有 . 100 之后。

我在freqs執行的操作的名稱是什么,如何將其轉換為 F#?

編輯: countlowers分別是Char -> String -> IntString -> Int ,我已經翻譯了這些。

這是一個列表推導式,在 F# 中它看起來像下面的最后兩行:

// stub out since don't know the implementation
let count (c:char) (s:string) = 4
let lowers (s:string) = 10
// your code
let percent a b = (float a / float b) * 100.
let freq ws = [for x in ['a'..'z'] do 
                   yield percent (count x ws) (lowers ws)]

更一般地說,我認為 Haskell 列表推導式具有以下示例建議的形式,並顯示了相應的 F#。

// Haskell
// [e(x,y) | x <- l1, y <- l2, pred(x,y)]
// F#
[for x in l1 do
    for y in l2 do
        if pred(x,y) then
            yield e(x,y)]

請注意,Brian 的 F# 代碼:

 let freq ws = [for x in ['a'..'z'] do yield percent (count x ws) (lowers ws)]

可以更優雅地寫成:

let freq ws = [for x in 'a'..'z' -> percent (count x ws) (lowers ws)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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