f# - 有没有办法在线进行多值比较?

标签 f# comparison

甚至问这个我都觉得很傻,因为它看起来很琐碎,但我的大脑让我失望了。如果我有以下情况:

let a, b, c = 1, 1, 1

是否有一种优雅的方法来确定 a、b 和 c 是否都具有相同的值。就像是:
let result = (a = b = c)

这失败了,因为表达式 a = b返回 true 并且下一个表达式的结果是 true = c并提示它期待 int,而不是 bool。我唯一能想到的是:
a = b && a = c && b = c

当我想添加更多变量时,这将不起作用。

我真正想做的是:
let same (x: string * string * string) =
    match x with
    | (a, a, a) -> true
    | _ -> false

我希望我可以将所有元素匹配到一个元素中,如果它们不同,它将继续前进,但它在匹配中的第二个元素上表示它已经被绑定(bind)。

最佳答案

要检查列表中的每个值是否相同:

let rec same = function
  | x::y::_ when x <> y -> false
  | _::xs -> same xs
  | [] -> true

用法
let a, b, c = 1, 1, 1
same [a; b; c] //true

关于f# - 有没有办法在线进行多值比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11477407/

相关文章:

azure - Azure 是否支持构建 F# 3.0/VS2012 项目?

boolean 值比较的 Python 列表给出了奇怪的结果

sql - 将字符串与 SQLite3 中的数字进行比较

c# - 数据集与空值的比较c#

.net-core - 积极的 F# 编译器优化是否只发生在引用的依赖项 + 发布配置上?

f# - Elmish.WPF 中子模型到父模型/主模型的消息传递是如何完成的?

c++ - 获取缓冲区内容,将其存储在结构中,获取新的缓冲区内容,看看结构中是否相等

c - 如何确定数据是否已写入结构中的变量

.net - 如何从表达式集合创建单引号表达式?

f# - 什么时候在方法声明中使用括号?