[英]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#?
編輯: count
和lowers
分別是Char -> String -> Int
和String -> 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.