| Minerva offers 2 built-in predicates for function style evaluation
of built-in and user defined predicates.
is/2 arithmetic evaluation
<-/2 function evaluation
Programming with functions is sometimes easier to write and
read than the equivalent predicate.
You can define an arithmetic function with a predicate
that returns its value in the last argument
somearithmetic(Arg1,...,ArgN,Result)
and call it either in relational notation with
?- somearithmetic(Arg1,...,ArgN,Result)
or in functional notation with
?- Result is somearithmetic(Arg1,...,ArgN).
You can define a general function with a predicate
that returns its value in the last argument
Predicate(Arg1,...,ArgN,Result)
and call it either in relational notation with
?- Predicate(Arg1,...,ArgN,Result)
or in functional notation with
?- Result <- Predicate(Arg1,...,ArgN).
<-/2 behaves as defined like
Res <- Goal :-
Goal =.. [Name|Args],
append(Args,[Res],XtArgs),
XtGoal =.. [Name|XtArgs],
call(XtGoal).
but is/2 and <-/2 are efficiently implemented builtin predicates
of MINERVA.
Example with classic Prolog:
List <- append([a,b,c],[d,e,f])
Example with a MINERVA Object:
Counter <- create_counter(10),
Index <- Counter::next,
...
|