我正在使用F#book进行机器学习。我正在将F#代码转换为C#并进行教程,因为我不太了解F#。我真的陷入了代码的一部分,并想知道是否有人可以告诉我如何在c#中编写代码。即使只是解释代码在F#中的作用也会有所帮助。我遇到的代码是
try (Connection conn = DBConnection.createConnection(); PreparedStatement pstmt = conn.prepareStatement("{call prueba1(?,?)}")) {
pstmt.setString(1,mun);
pstmt.setString(2,edo);
ResultSet rs = pstmt.executeQuery();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
我真的坚持
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)
这是.Net开发人员的机器学习项目教程 - 第2章。如果你可以帮助我那将是很棒的。提前致谢
答案 0 :(得分:10)
F#函数是curried。这意味着如果使用两个参数声明一个函数,并且只使用一个参数调用它,则结果是一个参数的另一个函数。这是一个例子:
scoreToken
因此,在tokenScore
函数中,名称group
现在引用一个带有一个参数的函数,然后使用两个参数调用scoreToken
:let scoreToken token = tokenScore group token
和价值刚刚过去了。换句话说,log
的定义可以写成:
ln
那就是同样的事情。
现在是下一行。首先,log 3.0 + 5.0
是natural logarithm function,通常用数学符号写成(log 3.0) + 5.0
。它需要一个浮点数,并返回一个浮点数。 F#中运算符优先级的规则是函数调用优先于高优先级,因此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
最后,Seq.sumBy
行也可能让您感到困惑。它有两个部分。首先,|>
相当于the two-parameter version of the LINQ Sum
method,但F#中的参数顺序与C#中的参数顺序相反。 F#Seq.sumBy scoreToken document
函数有两个参数;首先,应该应用于每个元素以生成值的函数,其次,元素的序列。即,如果你在没有document
运算符的情况下调用它,它将如下所示:
TokenizedDoc
这将通过scoreToken
序列(scoreToken t
类型,并且按照它的使用方式,显然可以将其视为一系列标记)。对于文档中的每个标记,将调用t
函数(如果您记得,调用tokenScore group t
,其中|>
是某个标记,与调用{document |> Seq.sumBy scoreToken
相同1}})。该调用将产生浮点值。最后,所有浮点值将被加在一起以产生最终得分。
然而,在F#中,传统上使用" pipe"在对序列进行求和或执行类似操作时,Seq.sumBy scoreToken document
运算符|>
完全等同于group.Proportion
。 return
运算符为rather well explained in the answer to another SO question,因此我不会在此处复制该答案。
所以这个函数正在做的是获取return
值的自然日志,并将其添加到文档中每个标记的分数。这个添加的结果是函数中的最后一个表达式,因此该函数的结果是:在F#中,与C#不同,您不需要在函数末尾键入{{1}} 。 ({{1}}关键字在F#中有不同的含义,我现在不会进入,因为这是一个完全不同的主题。)