Какая польза от if_ / 3?
Предикатif_/3
кажетсядовольно популярный среди немногих основных авторов в Прологе части переполнения стека.
Этот предикат реализован как таковой, благодаря @false:
if_(If_1, Then_0, Else_0) :-
call(If_1, T),
( T == true -> call(Then_0)
; T == false -> call(Else_0)
; nonvar(T) -> throw(error(type_error(boolean,T),_))
; /* var(T) */ throw(error(instantiation_error,_))
).
Тем не менее, я не смог найтиясно, просто и кратко объяснение того, что делает этот предикат и как его используют по сравнению, например, с классическая конструкция Пролога "если-то-еще"if -> then ; else
.
Большинство ссылок, которые я нашел, напрямую используют этот предикат и дают мало объяснений относительно того, почему он используется, что не специалист в Прологе мог легко понять.