Хорошо, я, наверное, делаю это неправильно, но это заставило меня вытащить мои волосы. Я не смог найти ничего, чтобы сделать то, что я хочуHaskell определяет несколько переменных при одном условии?
Возьмите этот псевдокод
my_function left right
= another_function new_left new_right (fourth_function new_left new_right)
where new_left = if some_condition then left else third_function left
new_right = if some_condition then third_function right else right
Как я могу избежать перепроверки some_condition? И я не говорю о сохранении some_condition
в качестве другой переменной в конструкции where
. Если я положил lets
внутри if
, я затем продублирую in another_function new_left new_right
.
В императивном языке, который я мог бы сделать что-то вроде
int new_left;
int new_right;
if (condition) {
new_left = left;
new_right = third_function(right);
} else {
new_left = third_function(left);
new_right = right;
}
return another_function(new_left, new_right, fourth_function(new_left, new_right));
Я знаю, что в функциональном языке, который вы не должны думать о делать вещи в последовательности, а как состав выражений, так что я «Я просто ищу способ написать оригинальный псевдокод, чтобы он был СУХОЙ. И это похоже на простой и относительно распространенный случай.
Редактировать
Извините за путаницу. Я не могу встроить third_function left/right
, потому что мне нужно использовать его значение дважды (обновленный псевдокод). И fourth_function
не может быть перемещен внутри another_function
Почему downvote? Неужели ему не хватает исследований, непонятно, что я прошу, упрямый, широкий, вне темы или что-то в этом роде? – Raekye