sitelogo
Functions

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,
...


Darueber read on...
scroll to top managed with ubiCMS