add numlist/3
This commit is contained in:
@@ -172,7 +172,7 @@ The following predicates are built-in to rusty-wam.
|
|||||||
* `nl/0`
|
* `nl/0`
|
||||||
* `nonvar/1`
|
* `nonvar/1`
|
||||||
* `numbervars/2`
|
* `numbervars/2`
|
||||||
* `numlist/2`
|
* `numlist/{2,3}`
|
||||||
* `once/1`
|
* `once/1`
|
||||||
* `partial_string/2`
|
* `partial_string/2`
|
||||||
* `phrase/{2,3}`
|
* `phrase/{2,3}`
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
:- module(between, [between/3, gen_int/1, gen_nat/1, numlist/2, repeat/1]).
|
:- module(between, [between/3, gen_int/1, gen_nat/1, numlist/2, numlist/3, repeat/1]).
|
||||||
|
|
||||||
%% TODO: numlist/3, numlist/5.
|
%% TODO: numlist/5.
|
||||||
|
|
||||||
:- use_module(library(lists), [length/2]).
|
:- use_module(library(lists), [length/2]).
|
||||||
|
|
||||||
@@ -46,3 +46,47 @@ numlist(Upper, List) :-
|
|||||||
( integer(Upper) -> findall(X, between(1, Upper, X), List)
|
( integer(Upper) -> findall(X, between(1, Upper, X), List)
|
||||||
; List = [_|_], length(List, Upper), findall(X, between(1, Upper, X), List)
|
; List = [_|_], length(List, Upper), findall(X, between(1, Upper, X), List)
|
||||||
).
|
).
|
||||||
|
|
||||||
|
diag_nats(M, N, M, N).
|
||||||
|
diag_nats(M, N, M1, N1) :-
|
||||||
|
N > 0, !,
|
||||||
|
M0 is M+1,
|
||||||
|
N0 is N-1,
|
||||||
|
diag_nats(M0, N0, M1, N1).
|
||||||
|
diag_nats(M, 0, M1, N1) :-
|
||||||
|
M0 is M+1,
|
||||||
|
diag_nats(0, M0, M1, N1).
|
||||||
|
|
||||||
|
diag_nats(0, 0).
|
||||||
|
diag_nats(M, N) :-
|
||||||
|
diag_nats(0, 1, M, N).
|
||||||
|
|
||||||
|
diag_nats_signs(0, 0, 0, 0) :- !.
|
||||||
|
diag_nats_signs(0, M, 0, M0) :- !,
|
||||||
|
( M0 = M ; M0 is -M ).
|
||||||
|
diag_nats_signs(M, 0, M0, 0) :- !,
|
||||||
|
( M0 = M ; M0 is -M ).
|
||||||
|
diag_nats_signs(M, N, M, N).
|
||||||
|
diag_nats_signs(M, N, M, N0) :-
|
||||||
|
N0 is -N.
|
||||||
|
diag_nats_signs(M, N, M0, N) :-
|
||||||
|
M0 is -M.
|
||||||
|
diag_nats_signs(M, N, M0, N0) :-
|
||||||
|
M0 is -M, N0 is -N.
|
||||||
|
|
||||||
|
diag_ints(M, N, M0, N0) :-
|
||||||
|
diag_nats(M, N),
|
||||||
|
diag_nats_signs(M, N, M0, N0).
|
||||||
|
|
||||||
|
diag_ints(M, N) :-
|
||||||
|
diag_ints(M0, N0, M, N).
|
||||||
|
|
||||||
|
gen_ints(L, U) :-
|
||||||
|
integer(L), !, gen_int(U), L =< U.
|
||||||
|
gen_ints(L, U) :-
|
||||||
|
integer(U), !, gen_int(L), L =< U.
|
||||||
|
gen_ints(L, U) :-
|
||||||
|
diag_ints(L, U), L =< U.
|
||||||
|
|
||||||
|
numlist(Lower, Upper, List) :-
|
||||||
|
gen_ints(Lower, Upper), findall(X, between(Lower, Upper, X), List).
|
||||||
|
|||||||
Reference in New Issue
Block a user