summaryrefslogtreecommitdiffhomepage
path: root/prolog.html.markdown
diff options
context:
space:
mode:
Diffstat (limited to 'prolog.html.markdown')
-rw-r--r--prolog.html.markdown16
1 files changed, 8 insertions, 8 deletions
diff --git a/prolog.html.markdown b/prolog.html.markdown
index 7a18a144..4f3984c7 100644
--- a/prolog.html.markdown
+++ b/prolog.html.markdown
@@ -104,7 +104,7 @@ magicNumber(42).
?- plus(1, 2, 3). % True
?- plus(1, 2, X). % X = 3 because 1+2 = X.
?- plus(1, X, 3). % X = 2 because 1+X = 3.
-?- plus(X, 2, 3). % X = 1 because X+1 = 3.
+?- plus(X, 2, 3). % X = 1 because X+2 = 3.
?- plus(X, 5, Y). % Error - although this could be solved,
% the number of solutions is infinite,
% which most predicates try to avoid.
@@ -230,14 +230,14 @@ nearby3(X,Y) :- nearby2(X,Y).
% Here is the structured comment declaration for nearby3:
-%% nearby3(+X:Int, +Y:Int) is semidet.
+%% nearby3(+X:Int, +Y:Int) is semideterministic.
%% nearby3(+X:Int, -Y:Int) is multi.
%% nearby3(-X:Int, +Y:Int) is multi.
% For each variable we list a type. The + or - before the variable name
% indicates if the parameter is bound (+) or free (-). The word after
% "is" describes the behaviour of the predicate:
-% semidet - can succeed once or fail
+% semideterministic - can succeed once or fail
% ( Two specific numbers are either nearby or not )
% multi - can succeed multiple times but cannot fail
% ( One number surely has at least 3 nearby numbers )
@@ -267,8 +267,8 @@ character(darthVader). % Creates atom value darthVader
% Note that below, writeln is used instead of print because print is
% intended for debugging.
-%% countTo(+X:Int) is det.
-%% countUpTo(+Value:Int, +Limit:Int) is det.
+%% countTo(+X:Int) is deterministic.
+%% countUpTo(+Value:Int, +Limit:Int) is deterministic.
countTo(X) :- countUpTo(1,X).
countUpTo(Value, Limit) :- Value = Limit, writeln(Value), !.
countUpTo(Value, Limit) :- Value \= Limit, writeln(Value),
@@ -281,7 +281,7 @@ countUpTo(Value, Limit) :- Value \= Limit, writeln(Value),
% IF test. If Value = Limit fails the second declaration is run.
% There is also a more elegant syntax.
-%% countUpTo2(+Value:Int, +Limit:Int) is det.
+%% countUpTo2(+Value:Int, +Limit:Int) is deterministic.
countUpTo2(Value, Limit) :- writeln(Value),
Value = Limit -> true ; (
NextValue is Value+1,
@@ -294,14 +294,14 @@ countUpTo2(Value, Limit) :- writeln(Value),
% called a "failure-driven loop" to do this, but newer ones use a higher
% order function.
-%% countTo2(+X:Int) is det.
+%% countTo2(+X:Int) is deterministic.
countTo2(X) :- forall(between(1,X,Y),writeln(Y)).
?- countTo2(10). % Outputs 1 to 10
% Lists are given in square brackets. Use memberchk to check membership.
% A group is safe if it doesn't include Joker or does include Batman.
-%% safe(Group:list(atom)) is det.
+%% safe(Group:list(atom)) is deterministic.
safe(Group) :- memberchk(joker, Group) -> memberchk(batman, Group) ; true.
?- safe([robin]). % True