Альтернатива , которую я не считаю лучше, поскольку она, возможно, менее читабельна , - это использование лямбда-выражения для определения нетипичного термина bs//0
. Используя Logtalk (который можно запустить с большинством систем Prolog) или SWI-Prolog (через library(yall)
, который реализует лямбда-выражения Logtalk):
bs --> [].
bs --> [[A|As],As]>>phrase(as,A), bs.
Лямбда-выражение обеспечивает доступ к неявным аргументам правила грамматики.
Примеры звонков:
?- phrase(bs, [[a],[a,a,a],[a,a]]).
true.
?- phrase(bs, [[a],[a,b,a],[a,a]]).
false.