Thun/thun/gnu-prolog/math.pl

47 lines
965 B
Prolog

:- multifile(func/3).
func(+, [A, B|C], [D|C]) :-
E =.. [+, B, A],
catch(D is E, _, D = E).
func(-, [A, B|C], [D|C]) :-
E =.. [-, B, A],
catch(D is E, _, D = E).
func(*, [A, B|C], [D|C]) :-
E =.. [*, B, A],
catch(D is E, _, D = E).
func(/, [A, B|C], [D|C]) :-
E =.. [/, B, A],
catch(D is E, _, D = E).
func(mod, [A, B|C], [D|C]) :-
E =.. [mod, B, A],
catch(D is E, _, D = E).
func(>, [A, B|C], [D|C]) :-
E =.. [>, B, A],
catch((E -> D = true ; D = false), _, D = E).
func(<, [A, B|C], [D|C]) :-
E =.. [<, B, A],
catch((E -> D = true ; D = false), _, D = E).
func(>=, [A, B|C], [D|C]) :-
E =.. [>=, B, A],
catch((E -> D = true ; D = false), _, D = E).
func(<=, [A, B|C], [D|C]) :-
E =.. [=<, B, A],
catch((E -> D = true ; D = false), _, D = E).
func(=, [A, B|C], [D|C]) :-
E =.. [=:=, B, A],
catch((E -> D = true ; D = false), _, D = E).
func(<>, [A, B|C], [D|C]) :-
E =.. [=\=, B, A],
catch((E -> D = true ; D = false), _, D = E).