如何解决将列表从findall谓词转换为字符串序言
我正在努力寻找一种将列表转换为字符串的方法。此列表是findall谓词的输出。
请参阅下面的代码。
mask = df1['MAT'].duplicated()
mask2 = df1['MAT'].map(df1.loc[mask,'D8'].eq('X').groupby(df1['MAT']).all())
mask = df1['SER'].eq('Yes') & ~mask & df1['D8'].eq('-') & mask2
df1['D99'] = np.where(mask,'X','-')
print (df1)
MAT MAT_IN SER D8 D99
0 X A1 Yes - X
1 X A2 No X -
2 X A3 No X -
3 X A4 Yes X -
4 Y B1 No - -
5 Y B2 No - -
6 Y B3 No - -
7 Y B4 No - -
8 Y B5 No - -
9 Z K1 Yes - -
10 Z K2 No - -
11 Z K3 No X -
12 Z K4 Yes X -
我的输出
edge(a,b).
edge(a,c).
edge(b,c).
edge(c,d).
edge(c,e).
edge(d,e).
edge(f,g).
edge(g,h).
route(X,Z,[]) :- edge(X,Z).
route(X,[Y|T]) :- edge(X,Y),route(Y,T).
allways(X,Y) :- findall(E,(route(X,Y,E),write(E),nl),_).
%allways(X,with_output_to(atom(_),maplist(write,E)),atomic_list_concat(E,'',A),_),write(A).
预期产量
?- allways(a,e).
[b,c]
[b,c,d]
[c]
[c,d]
我尝试了不同的方法,使用with_output_to谓词和atomic_list_concat谓词将列表转换为字符串,但是没有任何效果。
解决方法
您说“字符串”是什么意思?
有许多谓词可将列表连接到原子。就您而言,PlaceCard
听起来不错。
但是,您的问题在于您如何编写findall,捕获了错误的变量。
atomic_list_concat/2
或者,如果您根本不需要该列表,请不要使用findall。
?- findall(Str,( route(a,e,E),atomic_list_concat(E,Str) ),Strs),forall(member(Str,format("~w~n",[Str])).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。