If statement prolog中带有语言树的If语句
我目前正在生成一个prolog树,其中包含以下输入: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 ), 但当我这样
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)
-> /* ... */
; /* ... */
)