replace filter by tfiltert and fix Pipe{Reader,Writer} streams

This commit is contained in:
Bennet Bleßmann
2025-07-26 21:02:42 +02:00
committed by Bennet Bleßmann
parent ab675e071a
commit 25edde2eb4
4 changed files with 31 additions and 16 deletions

View File

@@ -7,7 +7,7 @@ List manipulation predicates
maplist/3, maplist/4, maplist/5, maplist/6,
maplist/7, maplist/8, maplist/9, same_length/2, nth0/3, nth0/4, nth1/3, nth1/4,
sum_list/2, transpose/2, list_to_set/2, list_max/2,
list_min/2, permutation/2, filter/3]).
list_min/2, permutation/2]).
/* Author: Mark Thom, Jan Wielemaker, and Richard O'Keefe
Copyright (c) 2018-2021, Mark Thom
@@ -538,11 +538,3 @@ perm([], []).
perm(List, [First|Perm]) :-
select(First, List, Rest),
perm(Rest, Perm).
%% filter(+Predicate, ?Xs1 ?Xs2).
%
% Succeeds if Xs2 is the list of elements X from Xs1 for which call(Pred, X) succeeds.
%
filter(_, [], []).
filter(Pred, [X1|XS1], XS) :- call(Pred, X1) -> filter(Pred, XS1, XS2), XS = [X1|XS2] ; filter(Pred, XS1, XS).

View File

@@ -9,7 +9,8 @@
:- use_module(library(error)).
:- use_module(library(iso_ext)).
:- use_module(library(lists), [member/2, maplist/2, filter/3]).
:- use_module(library(lists), [member/2, maplist/2]).
:- use_module(library(reif), [tfilter/3]).
%% process_create(+Exe, +Args:list, +Options).
@@ -148,7 +149,7 @@ must_be_known_options(Valid, Found, [X|XS]) :-
check_options([], _).
check_options([X | XS], Options) :-
(Kinds, Pred, Default, Choice) = X,
filter(process:find_option(Kinds), Options, Solutions),
tfilter(process:find_option(Kinds), Options, Solutions),
(
Solutions = [] -> Choice = Default;
Solutions = [Provided] -> call(Pred, Provided), Choice = Provided ;
@@ -156,11 +157,11 @@ check_options([X | XS], Options) :-
),
check_options(XS, Options).
find_option([Kind|_], Found) :- Found =.. [Kind,_].
find_option([_|Kinds], Found) :- find_option(Kinds, Found).
find_option(Names, Found, T) :- (functor(Found, Name, 1), member(Name, Names)) -> T = true ; T = false.
valid_stdio(IO) :- IO =.. [_, Arg],
valid_stdio(IO) :- arg(1, IO, Arg),
(
var(Arg) -> instantiation_error(process_create/3) ;
valid_stdio_(Arg) -> true ;
domain_error(process_create_option, Arg, process_create/3)
).
@@ -170,11 +171,15 @@ valid_stdio_(null).
valid_stdio_(pipe(Stream)) :- must_be(var, Stream).
valid_stdio_(file(Path)) :- must_be(chars, Path).
valid_env(env(E)) :- (
valid_env(env(E)) :-
must_be(list, E),
(
valid_env_(E) -> true ;
domain_error(process_create_option, env(E), process_create/3)
).
valid_env(environment(E)) :- (
valid_env(environment(E)) :-
must_be(list, E),
(
valid_env_(E) -> true ;
domain_error(process_create_option, environment(E), process_create/3)
).