List 将值插入每个子列表的开始
我目前正在编写一个谓词,它将遍历一个列表,并在列表的开头插入一个我计算过的值 第一步很简单,只需对每个列表执行计算,并用它统一变量NList 将值插入每个子列表的开始,list,prolog,meta-predicate,lambda,List,Prolog,Meta Predicate,Lambda,我目前正在编写一个谓词,它将遍历一个列表,并在列表的开头插入一个我计算过的值 第一步很简单,只需对每个列表执行计算,并用它统一变量N checkthrough([]). checkthrough([H|T]):- count_validentries(H,N), checkthrough(T). 我现在试图实现的是将变量N放在每个子列表的开头,因此每个列表都以有效条目的计数开始 我尝试使用累加器来完成此操作。尝试从空列表开始,并在每次添加新值N和列表头时: checkthro
checkthrough([]).
checkthrough([H|T]):-
count_validentries(H,N),
checkthrough(T).
我现在试图实现的是将变量N放在每个子列表的开头,因此每个列表都以有效条目的计数开始
我尝试使用累加器来完成此操作。尝试从空列表开始,并在每次添加新值N和列表头时:
checkthrough([],Sofar,Lastone).
checkthrough([H|T],Sofar,Lastone):-
count_validentries(H,N),
Newsofar is [N,H|Sofar],
checkthrough(T,Newsofar,Lastone).
我很确定我在这条路上的某个地方犯了一个非常愚蠢的错误。这是无效的Prolog语法,算术失败:“[2个内部变量]”不是函数
有人有什么建议吗?也许吧
checkthrough([],Sofar,Sofar).
checkthrough([H|T],Sofar,Lastone):-
count_validentries(H,N),
checkthrough(T,[[N|H]|Sofar],Lastone).
但你最终会把清单颠倒过来。保持简单会有帮助
checkthrough([],[]).
checkthrough([H|T],[[N|H]|Rest]):-
count_validentries(H,N),
checkthrough(T,Rest).
或者更好,如果您正在运行最新版本的SWI Prolog:
checkthrough(L,L1) :-
maplist([E,E1]>>(count_validentries(E,N),E1=[N|E]), L,L1).
也许吧
但你最终会把清单颠倒过来。保持简单会有帮助
checkthrough([],[]).
checkthrough([H|T],[[N|H]|Rest]):-
count_validentries(H,N),
checkthrough(T,Rest).
或者更好,如果您正在运行最新版本的SWI Prolog:
checkthrough(L,L1) :-
maplist([E,E1]>>(count_validentries(E,N),E1=[N|E]), L,L1).
使用和Prolog只需编写:
?- use_module(library(lambda)).
?- maplist(\Es^[N|Es]^count_validentries(Es,N), Ess, Xss).
使用和Prolog只需编写:
?- use_module(library(lambda)).
?- maplist(\Es^[N|Es]^count_validentries(Es,N), Ess, Xss).