到目前为止,我有以下工作:
gen_phrase(S1,S3,Cr) :- noun_phrase(S1,S2,Cr1), verb_phrase(S2,S3,Cr2),
append([Cr1],[Cr2],Cr),add_rule(Cr).
question_phrase(S1,S5,Cr) :- ist(S1,S2),noun_phrase(S2,S3,Cr1),
noun_phrase(S3,S4,Cr2),
append([Cr1],[Cr2],Cr).
add_rule([X,Y]) :-
Fact =.. [Y, X],
assertz(Fact).
给定测试运行,代码生成以下内容:
1 ?- gen_phrase([the,comp456,is,a,computing,course],S3,Cr).
S3 = []
Cr = [comp456, computing_course].
add_rule(Cr) 断言存在谓词 Computing_course(comp456)。现在我想做的是问一个问题:
4 ?- question_phrase([is,the,comp456,a,computing,course],X,Cr).
Cr = [comp456, computing_course] .
我需要做的是提取我可以做的computing_course和comp456,然后将其转换为prolog接受的形式。这应该看起来像 Y(X),其中 Y = Computing_course 是谓词,X = comp456 是原子。结果应该类似于:
2 ?- computing_course(comp456).
true.
然后是“什么是计算课程”之类的问题:
3 ?- computing_course(X).
X = comp456.
我考虑过使用assertz,但是一旦构造了谓词,我仍然不知道如何调用它。我很难找到需要采取哪些步骤来实现这一目标。(使用 swi-prolog)。
编辑:我已经意识到有一个谓词调用()。但是我想构建这样的东西:
ask([X,Y]) :- call(Y(X)).
2 ?- gen_phrase([a,comp456,is,a,computing,course],S3,Cr).
S3 = [],
Cr = [comp456, computing_course]
4 ?- question_phrase([is,the,comp456,a,computing,course],X,Cr),ask(Cr).
ERROR: toplevel: Undefined procedure: ask/1 (DWIM could not correct goal)
这样的 call() 在语法上似乎不正确。很高兴知道这是否可能以及如何。