小编Joh*_*ler的帖子

匹配字符串的模式为Seq [Char]

在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]一样(包括模式匹配)?但是,如果没有此转换,代码段将无法使用.

scala pattern-matching

10
推荐指数
3
解决办法
8005
查看次数

将函数应用于相等值时的结果不同

我只是挖掘了一下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)

因此虽然sumTupsumFixTup显示相同,但​​它们在传递时表现不同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)

haskell tuples equality

0
推荐指数
1
解决办法
181
查看次数

标签 统计

equality ×1

haskell ×1

pattern-matching ×1

scala ×1

tuples ×1