2014-07-27 9 views
10

w Haskell, można napisać:Czy można używać osłon w definicji funkcji w idris?

containsTen::Num a => Eq a => [a] -> Bool 
containsTen (x : y : xs) 
    | x + y == 10 = True 
    | otherwise = False 

Czy można napisać coś równoważnego w Idris, nie robiąc go ifThenElse (moje prawdziwe przypadku jest bardziej skomplikowany niż ten powyżej)?

Odpowiedz

11

Idris nie ma osłony wzoru dokładnie tak, jak w haskell. Jest z klauzuli, która jest składniowo podobny (ale bardziej wydajne, ponieważ obsługuje dopasowanie w obecności typów zależnych):

containsTen : Num a => List a -> Bool 
containsTen (x :: y :: xs) with (x + y) 
    | 10 = True 
    | _ = False 

Można przyjrzeć się Idris tutorial sekcji 7 widoki i „z” zasadą.

+1

To nie to samo, co strażnicy w przykładzie Haskella, który pozwalałby na takie rzeczy jak '| x + y == 10 ... | func (x * y + 52)> 42 = ... '. – Noein

Powiązane problemy