Prolog:可以基于此匹配条件(字谜)为值分配有效值

Prolog:可以基于此匹配条件(字谜)为值分配有效值,prolog,Prolog,下面是一个prolog程序,它可以将一个列表中的数字链接到另一个列表中的字母,因为它们在各自的列表中具有匹配的位置 例如,你有一个单词'listen'和一个数字321645 我有一个函数,split将这些单词和数字拆分成表,然后是一个函数assign\u map将它们分配到一起(目前我不想这样做) 问题:我需要将字母分配给变量。 例如,字母“L”将与数字3匹配 所以我想把L赋值给一个变量PosThree,然后对其余的字母赋值。 任何帮助都将不胜感激,谢谢您这是我的尝试,您可以添加事实: spli

下面是一个prolog程序,它可以将一个列表中的数字链接到另一个列表中的字母,因为它们在各自的列表中具有匹配的位置

例如,你有一个单词'listen'和一个数字321645 我有一个函数,split将这些单词和数字拆分成表,然后是一个函数assign\u map将它们分配到一起(目前我不想这样做)

问题:我需要将字母分配给变量。 例如,字母“L”将与数字3匹配 所以我想把L赋值给一个变量PosThree,然后对其余的字母赋值。
任何帮助都将不胜感激,谢谢您

这是我的尝试,您可以添加事实:

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

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

variable('0','PosZero').
variable('1','PosOne').
variable('2','PosTwo').
variable('3','PosThree').
variable('4','PosFour').
variable('5','PosFive').
variable('6','PosSix').
variable('7','PosSeven').
variable('8','PosEight').
variable('9','PosNine').


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

?-assignNum(listen,327654).
PosThree=l
PosTwo=i
PosSeven=s
PosSix=t
PosFive=e
PosFour=n
false

?-assignNum(award,82156).
PosEight=a
PosTwo=w
PosOne=a
PosFive=r
PosSix=d
false

谢谢你的回答,这不完全是它,我需要的是它是变量(L,PosThree),所以字母被分配给变量,但基于它旁边的数字,你是说变量('L','PosThree')。?你能告诉我输出应该是什么吗?输出其实并不重要,但是是的,就像你说的,变量('L','PosThree')。因此,这一结论是正确的。但是,最重要的是L被分配到PostThree,因为数字3和字母“L”在它们的列表中处于相同的位置。例如,我有listen和327654,所以L和3应该是PosOne,I和2应该是PosTwo。。。。。等等?事实上,L是后三位的,因为L与数字3匹配,因为数字3和字母L在它们的列表中位于同一点上
split( '', [] ).
split(W,X):- atom_chars(W,X).

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

variable('0','PosZero').
variable('1','PosOne').
variable('2','PosTwo').
variable('3','PosThree').
variable('4','PosFour').
variable('5','PosFive').
variable('6','PosSix').
variable('7','PosSeven').
variable('8','PosEight').
variable('9','PosNine').


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

?-assignNum(listen,327654).
PosThree=l
PosTwo=i
PosSeven=s
PosSix=t
PosFive=e
PosFour=n
false

?-assignNum(award,82156).
PosEight=a
PosTwo=w
PosOne=a
PosFive=r
PosSix=d
false