在Scala中,可以通过将其视为Seq [Char]来基于字符串的invididual字符来制定模式.
A Tour of Scala中提到了此功能的一个示例
这是在那里使用的示例代码:
object RegExpTest1 extends Application {
def containsScala(x: String): Boolean = {
val z: Seq[Char] = x
z match {
case Seq('s','c','a','l','a', rest @ _*) =>
println("rest is "+rest)
true
case Seq(_*) =>
false
}
}
Run Code Online (Sandbox Code Playgroud)
}
我遇到的问题是代码片段的第三行:
val z: Seq[Char] = x
Run Code Online (Sandbox Code Playgroud)
为什么这种演员必要?字符串在所有情况下都不应该像Seq [Char]一样(包括模式匹配)?但是,如果没有此转换,代码段将无法使用.
我只是挖掘了一下Haskell,我开始尝试计算文本中两个单词的Phi-Coefficient.但是,我遇到了一些我无法解释的非常奇怪的行为.
在删除所有内容后,我最终使用此代码重现问题:
let sumTup = (sumTuples?concat) frequencyLists
let sumFixTup = (138, 136, 17, 204)
putStrLn (show ((138, 136, 17, 204) == sumTup))
putStrLn (show (phi sumTup))
putStrLn (show (phi sumFixTup))
Run Code Online (Sandbox Code Playgroud)
这输出:
True
NaN
0.4574206676616167
Run Code Online (Sandbox Code Playgroud)
因此虽然sumTup和sumFixTup显示相同,但它们在传递时表现不同phi.
定义phi是:
phi (a, b, c, d) =
let dividend = fromIntegral(a * d - b * c)
divisor = sqrt(fromIntegral((a + b) * (c + d) * (a + c) * (b + d)))
in dividend / …Run Code Online (Sandbox Code Playgroud)