2014-11-12 3 views
-3

Использование сопоставления с образцом, определить функцию:Понимание Haskell Pattern Matching

ifThenElse :: Bool -> Int -> Int -> Int 

, который дает свой второй аргумент, если условие (первый аргумент) истинно, и третий аргумент, если условие ложно (для пример ifThenElse (3 > 5) 7 12 дает 12).

Как я могу это написать?

Вот то, что я до сих пор:

ifThenElse :: Bool -> Int -> Int -> Int 

ifThenElse True x1 y1 = x1 

ifThenElse False x1 y1 = y1 
+4

Что вы пытались? SO не является домашним решением. – chi

+0

Я использую онлайн-ресурсы, чтобы изучить Haskell, и у меня возникают проблемы даже с правильной работой кода при использовании сопоставления с образцом. – kmil

+0

Что вы пробовали? Вопросы должны касаться конкретной проблемы, и вы должны дать код. – crockeea

ответ

1

Вот подсказка.

Вы можете решить проблему с помощью если-то еще заявление:

ifThenElse :: Bool -> Int -> Int -> Int 
ifThenElse p x y = if p then x else y 

Но Bool перечисляется типа только два значения. Вы можете сопоставить аргументы ifThenElse с Bool значениями и определить, что делать, если функция получает False или True. Это называется соответствие шаблона:

ifThenElse :: Bool -> Int -> Int -> Int 
ifThenElse False = ... 
ifThenElse True = ... 

И наконец, если вы используете соответствие шаблон и в некоторых случаях в результате значения не зависит от конкретного аргумента, вы можете скрыть этот аргумент, используя заполнитель :

f :: Int -> Int -> Int -> Int 
f 0 x y = x + y 
f 1 _ y = y -- in case of getting `1` function returns just `y`