繁体   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