If statement prolog中带有语言树的If语句

If statement prolog中带有语言树的If语句,if-statement,tree,prolog,If Statement,Tree,Prolog,我目前正在生成一个prolog树,其中包含以下输入: the flight flew. 谁的树看起来像这样: s(the, np(flight), vp(flew)) 在生成上述树之后,我将尝试检查,在本例中,该树是否实际上是。还有一种情况是可以这样做的 据我所知,prolog if语句的格式如下: ( IF -> THEN; ELSE ), 我正努力做到: ( s(the, A, B)) -> assert(Tree); do_something_else ), 但当我这样

我目前正在生成一个prolog树,其中包含以下输入:

the flight flew.
谁的树看起来像这样:

s(the, np(flight), vp(flew))
在生成上述树之后,我将尝试检查,在本例中,该树是否实际上是。还有一种情况是可以这样做的

据我所知,prolog if语句的格式如下:

( IF -> THEN; ELSE ),
我正努力做到:

( s(the, A, B)) -> assert(Tree); do_something_else ),

但当我这样做时,我无法运行程序。我如何在if语句中询问树中的特定值?首先,我是否正确地执行了if语句?

您需要能够提供有用的信息,说明在尝试运行实际程序时实际发生的情况。换言之,学习如何提供服务

如果你有一个类似于你所展示的术语中的树,你所需要的只是一个规则,它在头部使用模式匹配统一来检查s/3的第一个参数是否是or:

这可能比使用if-then-else构造要好。如果你坚持,你必须说:

T = s(Foo, A, B),
(   Foo == the
->  /* do something */
;   Foo == did
->  /* do something else */
;   /* anything else */
)
这里的要点是if-then-else中的条件必须是经过计算的,要么成功,要么失败:不能像在谓词头部那样使用模式匹配。编写条件的另一种迂回方式是使用以下内容:


但让我烦恼的是,在解析之后,你会得到一个冠词,the,或者一个动词,did。s/3的第一个参数应该代表句子的哪一部分?

我不能运行程序是什么意思?是否有错误消息?这句话本身是正确的,但周围的环境可能是错误的。你收到错误信息了吗?
T = s(Foo, A, B),
(   Foo == the
->  /* do something */
;   Foo == did
->  /* do something else */
;   /* anything else */
)
(   arg(1, T, the)
->  /* ... */
;   arg(1, T, did)
->  /* ... */
;   /* ... */
)