仅当元组中的元素在 Erlang 中相同时,如何评估元组的第一个元素?

iMi*_*u96 2 erlang

假设我们的变量五是五个元素的元组。我们如何编写一个计算(并打印)第一个元素的表达式,但前提是所有五个元素都相同?

例如,给定以下元组:

Five = {4, 4, 4, 4, 4}.
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用element(_,_). 声明为:

element(1, Five) =:= element(2, Five).
Run Code Online (Sandbox Code Playgroud)

但这只是给我第一个元素VS第二个元素的评价,而不是全部。知道如何同时评估第一个元素和所有其他元素吗?{ ................. } = 五,........................

pot*_*ttu 8

如果您知道元组的大小(例如示例中的 5),您可以使用相同的变量进行模式匹配:

case Five of
    {X, X, X, X, X} -> io:format("~w", [X]), X;
    _Otherwise -> ok
end
Run Code Online (Sandbox Code Playgroud)

当然,在函数子句中也可以做同样的事情。

如果元组的大小未知,一种方法是将其转换为列表tuple_to_list/1,例如使用lists:all/2

[H | T] = tuple_to_list(Five),
IsSame = lists:all(fun (E) -> E =:= H end, T),
case IsSame of
    true  -> io:format("~w", [H]), H;
    false -> ok
end
Run Code Online (Sandbox Code Playgroud)