如何在Prolog中编写代码来生成事实以响应用户的输入,而无需手动编写?
例如,我给出了输入:
约翰尼喜欢莎莉。 凯伦喜欢鲍勃。
该计划应通过创建事实来回应
loves(Johnny, Sally).
loves(Karen, Bob).
我该怎么做?
答案 0 :(得分:0)
当然,你需要为你要显示的输入示例编写一个解析器,然后将它们转换为可以使用assertz
作为@EugeneSh声明的事实。已表示。
假设您已经解析了输入,并且在变量Verb
中有“动词”或谓词标识符,并且您在列表Args
中有参数。然后你就可以这样做:
Fact =.. [Verb | Args],
assertz( Fact ).
=../2
运算符对应一个带有列表的术语。例如:
| ?- foo(a, b) =.. L.
L = [foo,a,b]
yes
| ?- Term =.. [foo, x, y].
Term = foo(x,y)
yes
| ?-
正如我在评论中提到的,如果您希望将这些作为特定事实,则需要确保您的谓词标识符和参数是基础术语(不包含变量)。原子需要以小写字母开头,或者您必须将其放在单引号中。有效原子:foo
,bAr
,'Sam'
。以下是变量:FOO
,Sam
。