Prolog 为什么我找不到火柴?

Prolog 为什么我找不到火柴?,prolog,artificial-intelligence,Prolog,Artificial Intelligence,我有一个名为“stack”的列表结构 在我的程序中导致问题的地方,这是stack所持有的: stack([[s]],[np,[noun,john]]) 我是通过跟踪得到的,这是堆栈应该保存的东西 当编写下一条应该与此匹配的规则时 if buffer([[Word|_]]) and aux(Word) and stack([s],[np,[noun, john]]) 如果我这样做,那么规则将按其预期的方式执行。但是我需要在这里使用一个变量,而不是使用“and st

我有一个名为“stack”的列表结构

在我的程序中导致问题的地方,这是stack所持有的:

   stack([[s]],[np,[noun,john]])
我是通过跟踪得到的,这是堆栈应该保存的东西

当编写下一条应该与此匹配的规则时

if
    buffer([[Word|_]])
    and aux(Word)
    and stack([s],[np,[noun, john]])
如果我这样做,那么规则将按其预期的方式执行。但是我需要在这里使用一个变量,而不是使用“and stack([[s]],[np,[noon,john]])。然而,当我尝试使用其他任何东西时,规则不会触发。我不明白为什么。当我在列表中使用变量时,其他规则工作正常

我试过了

stack([s]|Foo)
stack([s]|[Foo])
stack([MyHead]|[MyTail]... and literally every other combination I can think of.

我不完全确定是什么导致了这个问题,您的堆栈似乎有arity 2,其中每个arg都是一个列表

这些不是列表的有效语法

stack([s]|Foo)
stack([s]|[Foo])
...
但是,由于一些Prolog将(|)/2运算符声明为(;)/2(即析取)的替代项,因此您不会看到任何语法错误

为了理解您的问题,您可以尝试通过统一运算符(=)/2来统一

你会得到

S = [[s]]
Foo = [np,[noun,john]]

非常感谢。我尝试了你的建议,但我得到了这个错误“语法错误:运算符优先级冲突”有什么想法吗?我尝试了SWI Prolog和Gnu Prolog,都按预期工作。你使用的是什么系统,在提示后你到底写了什么?
S = [[s]]
Foo = [np,[noun,john]]