我在SWI-prolog中创建了一个用于形态解析的数据库,但我遇到了一个问题。我现在把它煮到了问题区域。
lexicon('a', 'foo').
inflection('bc', 'bar').
morph(Input, Output) :-
string_concat(First, Second, Input),
intepretation(First, Second, Output).
intepretation(First, Second, Output) :-
lexicon(First, Foo),
inflection(Second, Bar),
string_concat(Foo, Bar, Output).
基本上,我给出命令“morph('abc',X)”并且我期望输出“X ='foobar'”但是我得到“假”。数据库简单地将输入字符串拆分为两个字符串,并尝试查找描述生成的子字符串的规则。如果找不到,它会再次将输入字符串拆分到另一个位置并再次尝试。显然,它应该发现,如果它将'abc'分成'a'和'bc',则存在适当的规则,但事实并非如此。
这是一个跟踪:
Call: (6) morph(abc, _G1441) ? creep
Call: (7) string_concat(_G1513, _G1514, abc) ? creep
Exit: (7) string_concat("", "abc", abc) ? creep
Call: (7) intepretation("", "abc", _G1441) ? creep
Call: (8) lexicon("", _G1520) ? creep
Fail: (8) lexicon("", _G1520) ? creep
Fail: (7) intepretation("", "abc", _G1441) ? creep
Redo: (7) string_concat(_G1513, _G1514, abc) ? creep
Exit: (7) string_concat("a", "bc", abc) ? creep
Call: (7) intepretation("a", "bc", _G1441) ? creep
Call: (8) lexicon("a", _G1520) ? creep
Fail: (8) lexicon("a", _G1520) ? creep % What's happening on this line?
Fail: (7) intepretation("a", "bc", _G1441) ? creep
Redo: (7) string_concat(_G1513, _G1514, abc) ? creep
Exit: (7) string_concat("ab", "c", abc) ? creep
Call: (7) intepretation("ab", "c", _G1441) ? creep
Call: (8) lexicon("ab", _G1520) ? creep
Fail: (8) lexicon("ab", _G1520) ? creep
Fail: (7) intepretation("ab", "c", _G1441) ? creep
Redo: (7) string_concat(_G1513, _G1514, abc) ? creep
Exit: (7) string_concat("abc", "", abc) ? creep
Call: (7) intepretation("abc", "", _G1441) ? creep
Call: (8) lexicon("abc", _G1520) ? creep
Fail: (8) lexicon("abc", _G1520) ? creep
Fail: (7) intepretation("abc", "", _G1441) ? creep
Fail: (6) morph(abc, _G1441) ? creep
我确信这是我误解字符串或其他东西的结果。我很感激任何帮助,谢谢。