Prolog 序言:将字符列表分配给数字列表

Prolog 序言:将字符列表分配给数字列表,prolog,Prolog,我正在平行比较两个列表。我想将组成一个单词的字母列表中的每个字母分配到数字列表中。 到目前为止,我编写的代码只是将原子分解成一个列表 split( '', [] ). split(W,X) :- atom_chars(W,X). main :- split(listen,X), write(X). 再加上一个数字321645,X 那么我不知道如何正确编码的部分 但分配每个字母时,一旦将其与列表中相同位置的数字分开。 如果我能想象 我希望这是有道理的。感谢您在我了解

我正在平行比较两个列表。我想将组成一个单词的字母列表中的每个字母分配到数字列表中。 到目前为止,我编写的代码只是将原子分解成一个列表

split( '', [] ).
split(W,X)
    :- atom_chars(W,X).
main
    :- split(listen,X),
       write(X).
再加上一个数字321645,X 那么我不知道如何正确编码的部分 但分配每个字母时,一旦将其与列表中相同位置的数字分开。 如果我能想象


我希望这是有道理的。感谢您在我了解您的问题后所做的尝试:-

split( '', [] ).
split(W,X):- atom_chars(W,X).

assignNum(A,B):-
    split(A,LA),
    split(B,LB),
    splitNum(LA,LB).

splitNum([H|T],[H2|T2]):-
        write(H),
        write('->'),
        writeln(H2),
      splitNum(T,T2).

?-assignNum(listen,123456).
l->1
i->2
s->3
t->4
e->5
n->6
false

?-assignNum(award,16548).
a->1
w->6
a->5
r->4
d->8
false

从你的问题中我了解到我的尝试:-

split( '', [] ).
split(W,X):- atom_chars(W,X).

assignNum(A,B):-
    split(A,LA),
    split(B,LB),
    splitNum(LA,LB).

splitNum([H|T],[H2|T2]):-
        write(H),
        write('->'),
        writeln(H2),
      splitNum(T,T2).

?-assignNum(listen,123456).
l->1
i->2
s->3
t->4
e->5
n->6
false

?-assignNum(award,16548).
a->1
w->6
a->5
r->4
d->8
false
您可以使用将目标应用于两个列表中的每个项目,并将结果收集到另一个列表中。同样,您可以使用maplist/2打印映射:

assign_map(A, B, LM):-
  split(A, LA),
  split(B, LB),
  maplist(map, LA, LB, LM).
  
map(A,B, A->B).
和测试查询:

?- assign_map(listen, 321645, LMap), maplist(writeln, LMap).
l->3
i->2
s->1
t->6
e->4
n->5
LMap = [(l->'3'),  (i->'2'),  (s->'1'),  (t->'6'),  (e->'4'),  (n->'5')].
您可以使用将目标应用于两个列表中的每个项目,并将结果收集到另一个列表中。同样,您可以使用maplist/2打印映射:

assign_map(A, B, LM):-
  split(A, LA),
  split(B, LB),
  maplist(map, LA, LB, LM).
  
map(A,B, A->B).
和测试查询:

?- assign_map(listen, 321645, LMap), maplist(writeln, LMap).
l->3
i->2
s->1
t->6
e->4
n->5
LMap = [(l->'3'),  (i->'2'),  (s->'1'),  (t->'6'),  (e->'4'),  (n->'5')].

谢谢你,帮了大忙。不是简单地打印A->B,而是如何根据变量L->3为变量3赋值,例如“L”?谢谢again@RobAnts对不起,我不相信你的评论。3不是一个变量。也许展示一个例子,或者如果这是一个与此问题不同的问题,那么再添加一个更详细的问题。谢谢,大帮助。不是简单地打印A->B,而是如何根据变量L->3为变量3赋值,例如“L”?谢谢again@RobAnts对不起,我不相信你的评论。3不是一个变量。可能会展示一个例子,或者如果这是一个与此问题不同的问题,那么请添加另一个问题,并提供更多详细信息