Я хочу перевести следующую процедурную программу в Haskell [написанную в псевдокоде]:
f(x) {
if(c1(x)) {
if(c2(x)) {
return a(x);
}
else if (c3(x)) {
if(c4(x)) {
return b(x);
}
}
return d(x);
}
Я написал следующую реализацию:
f x =
if (c1 x) then
if(c2 x) then
a x
else if (c3 x) then
if (c4 x) then
b x
else d x
else d x
else d x
К сожалению, он содержит (еще d x) три раза.
Есть ли лучший способ реализовать эту функцию? (т.е. вернуть (d x), если ни одно из условий не было выполнено?)
Я понимаю, что мы могли бы комбинировать условия c1 и c2 в (c1 x) && (c2 x), чтобы число, меньшее, но мои условия c1, c2, c3, c4 действительно очень длинные, и если я их объединю, я получу условие, которое занимает более одной строки.