add (\=)/2.
This commit is contained in:
@@ -85,6 +85,7 @@ The following predicates are built-in to rusty-wam.
|
|||||||
* `(==)/2`
|
* `(==)/2`
|
||||||
* `(\==)/2`
|
* `(\==)/2`
|
||||||
* `(=)/2`
|
* `(=)/2`
|
||||||
|
* `(\=)/2`
|
||||||
* `(=..)/2`
|
* `(=..)/2`
|
||||||
* `(->)/2`
|
* `(->)/2`
|
||||||
* `(;)/2`
|
* `(;)/2`
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ mod prolog;
|
|||||||
#[macro_use] mod test_utils;
|
#[macro_use] mod test_utils;
|
||||||
|
|
||||||
use prolog::io::*;
|
use prolog::io::*;
|
||||||
|
use prolog::lib::control::*;
|
||||||
use prolog::lib::lists::*;
|
use prolog::lib::lists::*;
|
||||||
use prolog::machine::*;
|
use prolog::machine::*;
|
||||||
|
|
||||||
@@ -35,6 +36,7 @@ fn prolog_repl() {
|
|||||||
let mut wam = Machine::new();
|
let mut wam = Machine::new();
|
||||||
|
|
||||||
load_init_str(&mut wam, LISTS);
|
load_init_str(&mut wam, LISTS);
|
||||||
|
load_init_str(&mut wam, CONTROL);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
print!("prolog> ");
|
print!("prolog> ");
|
||||||
|
|||||||
@@ -391,12 +391,12 @@ impl CompareNumberQT {
|
|||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
pub enum CompareTermQT {
|
pub enum CompareTermQT {
|
||||||
GreaterThan,
|
|
||||||
LessThan,
|
LessThan,
|
||||||
GreaterThanOrEqual,
|
|
||||||
LessThanOrEqual,
|
LessThanOrEqual,
|
||||||
|
Equal,
|
||||||
|
GreaterThanOrEqual,
|
||||||
|
GreaterThan,
|
||||||
NotEqual,
|
NotEqual,
|
||||||
Equal
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CompareTermQT {
|
impl CompareTermQT {
|
||||||
|
|||||||
13
src/prolog/lib/control.rs
Normal file
13
src/prolog/lib/control.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
pub static CONTROL: &str = ":- op(700, xfx, \\=).
|
||||||
|
|
||||||
|
once(G) :- G, !.
|
||||||
|
|
||||||
|
\\=(X, X) :- !, false.
|
||||||
|
\\=(_, _).
|
||||||
|
|
||||||
|
between(Lower, Upper, Lower) :-
|
||||||
|
Lower =< Upper.
|
||||||
|
between(Lower1, Upper, X) :-
|
||||||
|
Lower1 < Upper,
|
||||||
|
Lower2 is Lower1 + 1,
|
||||||
|
between(Lower2, Upper, X).";
|
||||||
@@ -7,23 +7,14 @@ pub static LISTS: &str = "member(X, [X|_]).
|
|||||||
append([], R, R).
|
append([], R, R).
|
||||||
append([X|L], R, [X|S]) :- append(L, R, S).
|
append([X|L], R, [X|S]) :- append(L, R, S).
|
||||||
|
|
||||||
once(G) :- G, !.
|
|
||||||
|
|
||||||
memberchk(X, Xs) :- member(X, Xs), !.
|
memberchk(X, Xs) :- member(X, Xs), !.
|
||||||
|
|
||||||
reverse(Xs, Ys) :- reverse(Xs, [], Ys).
|
reverse(Xs, Ys) :- reverse(Xs, [], Ys).
|
||||||
|
|
||||||
reverse([], Ys, Ys) :- !.
|
reverse([], Ys, Ys).
|
||||||
reverse([H|T], Ps, Rs) :-
|
reverse([H|T], Ps, Rs) :-
|
||||||
reverse(T, [H|Ps], Rs).
|
reverse(T, [H|Ps], Rs).
|
||||||
|
|
||||||
between(Lower, Upper, Lower) :-
|
|
||||||
Lower =< Upper.
|
|
||||||
between(Lower1, Upper, X) :-
|
|
||||||
Lower1 < Upper,
|
|
||||||
Lower2 is Lower1 + 1,
|
|
||||||
between(Lower2, Upper, X).
|
|
||||||
|
|
||||||
maplist(_, []).
|
maplist(_, []).
|
||||||
maplist(Cont1, [E1|E1s]) :-
|
maplist(Cont1, [E1|E1s]) :-
|
||||||
call(Cont1, E1),
|
call(Cont1, E1),
|
||||||
|
|||||||
@@ -1 +1,3 @@
|
|||||||
|
pub mod control;
|
||||||
pub mod lists;
|
pub mod lists;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user