List Prolog,标识当前位置项的列表

List Prolog,标识当前位置项的列表,list,prolog,win-prolog,List,Prolog,Win Prolog,我很难在序言中写出胸部“C”在“L”的位置 这是我目前拥有的代码,但我认为我把它弄得太复杂了,而且走错了方向 location(C, L). location(C, [[C,L]|_]). location(C, [_|T]) :- location(C, T, L). 有人能帮我解决这个问题吗 要检查它,我使用以下代码: location(b, [(a,10), (b,6), (c,8), (d,14)]). 我现在更改了它,并且:

我很难在序言中写出胸部“C”在“L”的位置 这是我目前拥有的代码,但我认为我把它弄得太复杂了,而且走错了方向

    location(C, L).

    location(C, [[C,L]|_]).
    location(C, [_|T]) :-
            location(C, T, L).
有人能帮我解决这个问题吗

要检查它,我使用以下代码:

    location(b, [(a,10), (b,6), (c,8), (d,14)]).

我现在更改了它,并且:

    location(C, L, P). 
    location(C, L, P) :- memberchk((C,P), L).

但它似乎不起作用,我错过了什么?

试试看

location(S, L, P) :- memberchk((S,P), L).
然后你会得到

?- location(b, [(a,10), (b,6), (c,8), (d,14)], P).
P = 6.

这是另一个,尽管这个解决方案很好

location(C, [(C,P)|_], P):-!.
location(C, [_|T], P) :- location(C, T, P).

@嗯,是的,不应该在那里。定义一个谓词位置(C,L)是令人惊讶的,如果C在位置L中正好显示为胸部,那么它是真的。例如,位置(a,[(a,10),(b,6),(C,8),(d,14)])。结果会是:是的,这个确实做到了,还有更多;当找到匹配项时,它将元组的第三个参数与第二个参数统一起来。我建议你多学一点Prolog,很明显你对ATM很困惑。是的,我才刚刚开始学习它,并尝试一些例子来建立我的知识。我现在已经改变了它,有了:位置(C,L,P)。位置(C,L,P):-memberchk((C,P,L)。位置(b,[(a,10),(b,6),(c,8),(d,14)],P)。但是它似乎不起作用,我错过了什么?对不起,我只是看到了win prolog标签(我从来没有听说过这个系统)。尝试member而不是memberchk。如果这不起作用,@iccthedral的答案应该是好的。
location(C, [(C,P)|_], P):-!.
location(C, [_|T], P) :- location(C, T, P).