Предикат if_/3
кажется довольно популярным среди несколько основных участников в части Prolog.
Этот предикат реализуется как таковой, любезно предоставленный @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 Prolog if -> then ; else
.
Большинство ссылок, которые я нашел, напрямую используют этот предикат и не дают объяснений относительно того, почему он используется, что легко понять непрофессионал в Прологе.