Prolog - 返回倒数第二个列表元素

Mik*_*e D 1 prolog

对于试图在Prolog中编写的列表中返回倒数第二个元素的问题感到困惑.这种语言使用起来很有趣,但是我无法绕过它.这是我有的:

secondLast([X], X).
secondLast(X, [Y], X) :- secondLast(Y, K).    
secondLast(X, [Y|Z], K) :- secondLast(Y, Z, K).   
secondLast([X|Z], Ans) :- secondLast(X, Z, Ans).
Run Code Online (Sandbox Code Playgroud)

所以呼唤secondLast([a, b, c, d], X). X应该相等c.

有任何想法吗?

谢谢!

Ser*_*nko 5

可以只是:

secondLast(L, X) :-
    append(_, [X, _], L).
Run Code Online (Sandbox Code Playgroud)


Cap*_*liC 5

你应该应用模式匹配:

secondLast([X,_], X).
secondLast([_|T], X) :- secondLast(T, X).
Run Code Online (Sandbox Code Playgroud)