簡體   English   中英

需要幫助將一些F#代碼轉換為C#

[英]Need Help Converting some F# code to C#

我正在使用F#書進行機器學習。 我將F#代碼轉換為C#並進行了教程,因為我不太了解F#。 我真的陷入了代碼的一部分,想知道是否有人可以告訴我如何用C#編寫代碼。 即使只是解釋代碼在F#中的功能也將有所幫助。

let tokenScore (group:DocsGroup) (token:Token) =
  if group.TokenFrequencies.ContainsKey token
  then log group.TokenFrequencies.[token]
  else 0.0

let score (document:TokenizedDoc) (group:DocsGroup) =
   let scoreToken = tokenScore group
   log group.Proportion +
   (document |> Seq.sumBy scoreToken)

我真的堅持

let scoreToken = tokenScore group
   log group.Proportion +
   (document |> Seq.sumBy scoreToken)

這是.Net開發人員機器學習項目中的教程-第2章。如果可以幫助我,那真是太好了。 提前致謝

F#函數是咖喱的 這意味着,如果使用兩個參數聲明一個函數,而僅用一個參數調用它,則結果是一個參數的另一個函數 這是一個例子:

let add x y = x + y
let n = add 2 3  // Now n has the value 5
let addFive = add 5  // This is a *function* that takes one parameter
let altAddFive y = add 5 y  // Another way to define the same thing
let result = addFive 3  // Now result has the value 8
let altResult = altAddFive 3  // This one also has the value 8

因此,在score函數中,名稱scoreToken現在是指一個具有一個參數的函數,然后使用兩個參數調用tokenScoregroup和剛剛傳遞的值。 換句話說, scoreToken的定義可以寫成:

let scoreToken token = tokenScore group token

那將是同一回事。

現在下一行。 首先, log自然對數函數 ,通常以數學符號ln表示。 它采用一個浮點數,並返回一個浮點數。 運算符優先級的F#中的規則是該函數調用比運營商優先級更高 ,因此log 3.0 + 5.0將被解釋為(log 3.0) + 5.0 ,這不會是相同的值作為log 8.0 因此,以下幾行:

log group.Proportion +
(document |> Seq.sumBy scoreToken)

等效於:

let score1 = log group.Proportion
let score2 = document |> Seq.sumBy scoreToken
score1 + score2

最后, document |> Seq.sumBy scoreToken行也可能使您感到困惑。 它有兩個部分。 首先, Seq.sumBy 與LINQ Sum方法的兩參數版本等效,但是F#中的參數順序與C#中的參數順序相反。 F# Seq.sumBy函數采用兩個參數; 首先,應應用於每個元素以產生值的函數,其次是元素序列。 即,如果您在不使用|>運算符的情況下調用它,則它將看起來像這樣:

Seq.sumBy scoreToken document

這將遍歷document序列(其類型為TokenizedDoc並且鑒於其使用方式,顯然可以視為令牌序列)。 對於文檔中的每個令牌,將調用scoreToken函數(如果您還記得,調用scoreToken t ,其中t是某些令牌,與調用tokenScore group t相同)。 該調用將產生一個浮點值。 最后,所有浮點值將被加在一起以產生最終分數。

但是,在F#中,傳統上在對序列求和或執行類似操作時使用“ pipe”運算符|>document |> Seq.sumBy scoreTokenSeq.sumBy scoreToken document完全等效。 |>運算符在另一個SO問題的答案中作了很好的解釋,因此在此我將不重復該答案。

因此,此功能正在執行的操作是獲取group.Proportion值的自然對數,並將其添加到文檔中每個標記的分數中。 加法的結果是函數中的最后一個表達式,所以這就是函數的結果:在F#中,與C#不同,您不需要在函數末尾鍵入return return關鍵字在F#中具有不同的含義,由於這是一個完全不同的主題,因此我現在不再贅述)。

暫無
暫無

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

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