微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将列表从findall谓词转换为字符串序言

如何解决将列表从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 举报,一经查实,本站将立刻删除。