В Прологе каждый представляет списки в виде связанных списков .Связанный список имеет два «шаблона»:
- пустой список
[]
;и - "минусы"
[H|T]
с H
и T
параметрами с H
головой списка (первый элемент) и T
хвостомсписка (список с оставшимися элементами).
Таким образом, мы можем представить список без элементов как []
, с одним элементом как [H1|[]]
, сдва элемента, такие как [H1|[H2|[]]]
и т. д.
Приведенные выше обозначения немного многословны, для списков можно использовать синтаксический sugar.Например, [H1, H2]
эквивалентно [H1|[H2|[]]]
, аналогично [H1,H2|T]
эквивалентно [H1|[H2|T]]
.
Таким образом, [_]
в вашем коде является синтаксическим сахаром для [_|[]]
.Это означает, что это одноэлементный список (список с точно одним элементом _
), и мы не заботимся об этом значении списка, пока он объединяетс этим шаблоном.
Но тогда в некотором контексте, например, скажите функцию.
f/1
здесь не функция, этопредикат .Здесь это означает, что предикат f/1
удовлетворяется для пустого списка, для списка с одним элементом независимо от того, что это за элемент, и для списка [X|Y]
(я предполагаю, что это идентификаторы в верхнем регистре, поскольку в противном случае он выполняется толькоесли голова является константой x
, а хвост является константой y
, что означает, что на самом деле это не список).