在函数中返回布尔值

时间:2013-10-05 07:49:58

标签: f#

我有这个功能:

let myFunction list (var1, var2) : bool =
    for (x,y) in list do
        match (var1, var2) with
        | (1, 11) | (2, 22) -> true
        | (_, _) ->
            if not (x = y) then
                true // error is here
            false

这会返回一个错误,指出函数要求返回的值具有bool类型而不是unit。我想要实现的是每当x != y返回true,所以循环应该停在那里;否则最后会返回假。

3 个答案:

答案 0 :(得分:4)

在F#中,if语句可以返回。因此,如果您单独放置true,则需要输入匹配的false,以便if的两边都返回bool

        if not (x = y) then
            true 
        else false

答案 1 :(得分:1)

如果您想在找到匹配项后立即停止搜索,请尝试以下操作:

let myFunction list (var1, var2) : bool =
    match (var1, var2) with
    | (1, 11) | (2, 22) -> true
    | _ -> Seq.exists (fun (x, y) -> x <> y) list

Seq.exists接受一个返回布尔值的函数并遍历列表,直到找到函数返回true的元素,在这种情况下它将返回true。如果它到达列表的末尾而没有找到任何这样的元素,它将返回false

答案 2 :(得分:1)

首先,“if x then true else false”与“x”相同。

所以这(你忘了John指出的其他部分):

if not (x = y) then
   true
else false

可以简化为:

x <> y

你的功能虽然有点奇怪。我想这可能是你的意思:

let myFunction list (var1, var2) =
    List.exists (fun (x, y) -> match (var1, var2) with
                               | (1, 11) | (2, 22) -> true
                               | _ -> (x <> y))
                list

可以将var1和var2的检查移出List.exists。所以:

let myFunction list = function
                      | (1, 11) | (2, 22) -> true
                      | _ -> List.exists (fun (x, y) -> x <> y) list