您好我想在Prolog中创建一个程序,给出一个数字列表和一个数字,它将所有数字位置的一致性附加到第二个列表中.
例如,对于list (5,10,4,5,6,5)和number =5新列表应该是
(1,4,6)
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我的代码
positions(X, [X|_],1).
positions(X, [P|T], N) :- positions(X, T, N1), N is N1+1.
find(X, [H|T] ,Z) :-positions(X,[H|T],N) , append([],N,Z).
Run Code Online (Sandbox Code Playgroud)
这些位置返回列表中X的第一个并发,但我不知道如何继续.你能帮助我吗?
如果它不是一个赋值,那么你可以使用内置的findall/3和nth1/3受益:
?- findall(Nth, nth1(Nth, [5,10,4,5,6,5], 5), Nths).
Nths = [1, 4, 6].
Run Code Online (Sandbox Code Playgroud)
只需要使用第n1个短语,并运行它,您就可以看到它正在回溯并找到多个解决方案,然后我们只使用findall将它们收集到一个列表中.
?- nth1(Nth, [5,10,4,5,6,5], 5).
Nth = 1 ;
Nth = 4 ;
Nth = 6.
Run Code Online (Sandbox Code Playgroud)
nth1/3,当第一个参数使用变量时,就是说'给我一个列表索引,在第二个参数列表中找到第三个参数的位置.