From: Mark Thom Date: Sat, 10 Mar 2018 02:27:22 +0000 (-0700) Subject: add is_list X-Git-Tag: v0.8.110~528 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=2cc5367c521c7155110e16b42b92fcc2584ad817;p=scryer-prolog.git add is_list --- diff --git a/README.md b/README.md index 34eed0bf..9dd97819 100644 --- a/README.md +++ b/README.md @@ -138,6 +138,7 @@ The following predicates are built-in to rusty-wam. * `functor/3` * `ground/1` * `integer/1` +* `is_list/1` * `length/2` * `maplist/1..8` * `member/2` diff --git a/src/prolog/lib/lists.pl b/src/prolog/lib/lists.pl index f8c49710..b139f83b 100644 --- a/src/prolog/lib/lists.pl +++ b/src/prolog/lib/lists.pl @@ -1,4 +1,4 @@ -:- module(lists, [member/2, select/3, append/3, memberchk/2, reverse/2, maplist/2, +:- module(lists, [member/2, select/3, append/3, is_list/1, memberchk/2, reverse/2, maplist/2, maplist/3, maplist/4, maplist/5, maplist/6, maplist/7, maplist/8, maplist/9]). @@ -11,6 +11,10 @@ select(X, [Y|Xs], [Y|Ys]) :- select(X, Xs, Ys). append([], R, R). append([X|L], R, [X|S]) :- append(L, R, S). +is_list(X) :- var(X), !, false. +is_list([]). +is_list([_|T]) :- is_list(T). + memberchk(X, Xs) :- member(X, Xs), !. reverse(Xs, Ys) :- var(Ys), !, reverse(Xs, [], Ys).