Haskell If

时间:2015-07-23 16:42:19

标签: haskell if-statement logic conditional-statements

我遇到以下问题:

写一个接收三个Ints的函数,如果它们都是正数则求和,否则返回0(零)。

我所做的是以下内容:

sum' :: int -> int -> int -> int
sum' x y z = if x >= 0, y >= 0, z >= 0 then x+y+z else 0

我不知道如何在if上创建多个条件,不确定是否使用逻辑“连接器”(如Java中的||&&)或者是否在与我写的代码类似。

2 个答案:

答案 0 :(得分:7)

可以通过多种方式完成。

例如,使用&&

sum' :: Int -> Int -> Int -> Int
sum' x y z = if x >= 0 && y >= 0 && z >= 0 then x+y+z else 0

或使用all和列表:

sum' :: Int -> Int -> Int -> Int
sum' x y z = if all (>= 0) xs then sum xs else 0
    where xs = [x, y, z]

答案 1 :(得分:4)

或者使用警卫,这会使它看起来几乎完全像定义的人类版本:

@implementation SomeClass
{
    NSMutableArray *_someArray;
}

-(instancetype)initWithArraySize:(int)arraySize
{
    if(self = [super init]) {
        _someArray = [[NSMutableArray alloc] initWithCapacity:arraySize];
    }
    return self;
}

在旁注中,请始终记住类型以大写字母开头。在您的情况下,您的类型签名应使用" Int"而不是" int"。

我希望这会有所帮助。