Я хотел бы получить первый успешный результат из функции A, которая внутренне вызывает функции B и C по порядку.
Ключевой момент здесь - СУХОЙ.Это означает, что я не хочу вводить новую переменную (например, чтобы сохранить состояние результата предыдущего вызова функции - см. Плохой пример # 1), я не хочу повторять свое действие (например, вызывать одну и ту же функцию дважды - вижу плохопример # 2).
Пример кода на PHP, но я не зависим от PHP, любой язык приемлем.ООП, функциональный, здесь не имеет значения.
Концепции, которые я нашел до сих пор, которые могут привести к решению, - это использование Maybe (https://marcosh.github.io/post/2017/06/16/maybe-in-php.html), некоторые также предложили использовать nil (https://clojure.org/reference/data_structures#nil) в качестве типа возврата.Однако у меня пока нет достаточного рабочего примера.И мне интересно, возможно ли это решение вообще, я даже начал читать книгу под названием «Аннотированная Тьюринг», надеясь найти там некоторые ссылки на проблему или пределы ...
Плохой пример # 1 (доп.переменная):
A() {
$B = B();
if($B !== null) {
return B();
}
return C();
}
Плохой пример # 2 (дополнительный вызов):
A() {
if(B() !== null) {
return B();
}
return C();
}
Ключевой момент здесь - СУХОЙ: - Я не хочу вводить дополнительные переменные (плохой пример #1).- Я не хочу, чтобы какая-либо функция запускалась дважды (плохой пример # 2).
Можно ли вообще написать такой код без повторения вызова и / или сохранения состояния в дополнительную переменную?
Если да - я бы хотел это увидеть.Если нет, то я хотел бы иметь действительное доказательство, которое вообще невозможно написать.