Prolog 在序言末尾用N个字符填充列表
我需要在Prolog中的列表末尾填入N个字符。 如果没有库或映射列表,则使用findall命令 我尝试了这段代码,它以递归方式创建了更多的列表,最后带有“e”字符,但我需要一个列表Prolog 在序言末尾用N个字符填充列表,prolog,Prolog,我需要在Prolog中的列表末尾填入N个字符。 如果没有库或映射列表,则使用findall命令 我尝试了这段代码,它以递归方式创建了更多的列表,最后带有“e”字符,但我需要一个列表 append_e(_,0,[]). append_e(List,E_size_loop,[ListTemp|List0]):- E_size_loop>0, N2 is E_size_loop-1, append(List,[e],ListTemp), append_e(Lis
append_e(_,0,[]).
append_e(List,E_size_loop,[ListTemp|List0]):-
E_size_loop>0,
N2 is E_size_loop-1,
append(List,[e],ListTemp),
append_e(ListTemp,N2,List0).
这一个是删除我以前的列表,并用我想要的e字符数替换它
append_e(_,0,[]).
append_e(List,E_size_loop,ListTemp):-
E_size_loop>0,
N2 is E_size_loop-1,
append_e(List,N2,ListO),
append(ListO,[e],ListTemp)
长度和映射列表可以合并为一个定义:
append_e(Xs, N, Ys) :-
n_es(N, Es),
append(Xs, Es, Ys).
n_es(N, Es) :-
length(Es, N),
maplist(=(e), Es).
对于N被实例化的情况,可以手动定义
n_es(N0, [e|Es]) :-
N0 > 0,
N1 is N0-1,
n_es(N1, Es).
n_es(0, []).
您需要复制输入列表,直到到达其末尾,然后添加给定字符的
N
副本:
fill_list([], Character, N, List) :-
fill_with_character(Character, N, List).
fill_list([Head| Tail0], Character, N, [Head| Tail]) :-
fill_list(Tail0, Character, N, Tail).
fill_with_character/3
谓词可以在复制字符时简单地进行倒计时:
fill_with_character(_, 0, []) :- !.
fill_with_character(Character, N, [Character| Tail]) :-
N > 0,
M is N - 1,
fill_with_character(Character, M, Tail).
第一个子句中的切口是一个绿色切口,它避免了虚假的选择点
电话示例:
| ?- fill_list([a,b,c], d, 2, L).
L = [a,b,c,d,d]
yes
谢谢你的回答,但我需要创建没有地图列表。。。我是在描述中写的。同时,你应该能够将上面的地图列表目标转换成相应的地图列表自由版本。它工作得非常好,但我需要递归地执行,我失败了!非常感谢您的回答,但它似乎不起作用一个错误出现语法错误:运算符优先级冲突在第二句中,如果我删除剪切,它将消失,但另一个错误出现在运行modeCopy时,并将上面的代码粘贴到Prolog会话中,显示没有语法错误。与我使用的其他代码有冲突好的,再次谢谢你!
| ?- fill_list([a,b,c], d, 2, L).
L = [a,b,c,d,d]
yes