在Prolog中获取列表的第二个元素

Eig*_*lue 1 prolog

遇到这个任务有些麻烦.

目前我已经尝试了这个,我知道这是错误的,因为我不确定如何将L分为头部和尾部,但这是我想要的那种想法.

second(L,E) :- [H | E | T]
Run Code Online (Sandbox Code Playgroud)

我认为E必须在头部之后才能成为第二个元素.不过我是这门语言的新手,想要一些见解.如何从谓词的编写方式中获得这个头和尾.对此问题的一些见解将非常感激.谢谢.

Pau*_*ura 7

您可以将统一移动到子句的头部并简单地写:

second([_, Second| _], Second).
Run Code Online (Sandbox Code Playgroud)

列表的表示法是用逗号分隔初始元素,然后用垂直条分隔列表尾部,即包含其余元素的列表.您可以在Prolog顶级解释器上尝试的一些示例应该更清楚:

?- [1, 2, 3] = [Head| Tail].
Head = 1,
Tail = [2, 3].

?- [1, 2, 3] = [First, Second| Tail].
First = 1,
Second = 2,
Tail = [3].

?- [1, 2, 3] = [First, Second, Third| Tail].
First = 1,
Second = 2,
Third = 3,
Tail = [].
Run Code Online (Sandbox Code Playgroud)