2013-09-24 44 views
1

我有一个名为“堆栈”的列表结构。为什么我没有得到一个匹配?

在我的程序,这是造成问题的地步,这是栈认为:

stack([[s]],[np,[noun,john]]) 

我得到这个运行的轨迹,它的堆栈什么是应该持有。

当写下应该匹配这个规则。

if 
    buffer([[Word|_]]) 
    and aux(Word) 
    and stack([s],[np,[noun, john]]) 

如果我这样做,那么规则将按照它的设想执行。但我需要在这里使用一个变量,而不是使用“和stack([[s]],[np,[noun,john]])”。但是,当我尝试使用其他任何东西时,规则不会触发。我无法弄清楚为什么。当我在列表中使用变量时,其他规则正常工作。

我用尽

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

我不能完全确定是什么原因造成这个问题

回答

3

你的筹码似乎有元数2,其中每个arg是一个列表。

这些都不是列表

stack([s]|Foo) 
stack([s]|[Foo]) 
... 

但由于一些Prolog的声明有效的语法(|)/ 2的操作者作为替代(;)/ 2(即脱节),你将不会看到任何语法错误。

要了解你的问题,你可以尝试结合起来,通过统一的操作符(=)/ 2

?- stack(S, Foo) = stack([[s]],[np,[noun,john]]). 

的意思是你会得到

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

谢谢;我试过你的建议,但我得到这个错误“语法错误:操作员优先级冲突”任何想法? – yoonsi

+1

我尝试了SWI-Prolog和Gnu Prolog,都按预期工作。你使用什么系统,你在提示后写了什么? – CapelliC

相关问题