您可以使用内置函数和 Prolog 的搜索功能,而不是定义自动机。
append/3 在 3 个列表之间建立关系。即,第三个列表是前两个列表的串联。这可用于轻松回答您的作业:
satisfy(L) :- append(_, [0,1|R], L), append(_, [1,0,0|_], R).
如您所见,append(_, PatternAndRest, L)
搜索L 中的模式并产生其余的。
但是您可能需要编写一个递归谓词来扫描列表以查找模式。我希望您可以在 meet/1 中看到的语法对您有所帮助。