用prolog翻译一个句子

用prolog翻译一个句子,prolog,word,translate,Prolog,Word,Translate,有人能帮我显示未翻译的单词吗?例如,我想翻译“我想吃”,事实上,没有to的参数…因此它将显示“saya mahutomakan”…单词to保持不变,需要显示它..这是我的代码示例 :-dynamic(item/1). kamus(saya,i). kamus(suka,love). kamus(awak,you). run:- write('Enter a sentence:'), read(V), printed(V,C). %malay to eng check(S,W

有人能帮我显示未翻译的单词吗?例如,我想翻译“我想吃”,事实上,没有to的参数…因此它将显示“saya mahutomakan”…单词to保持不变,需要显示它..这是我的代码示例

:-dynamic(item/1).

kamus(saya,i).
kamus(suka,love).
kamus(awak,you).

run:-
  write('Enter a sentence:'),
  read(V),
  printed(V,C). 

%malay to eng

check(S,W,R):-
  kamus(R,S),name(S,W).

%eng to malay

check(S,W,R):-
  kamus(S,R),name(S,W).

check(Y,R):-
  item(Z),name(Z,Y).

try2(P,R):- 
  name(P,Q),
  split(Q,32,E),
  member(Z,E),
  assert(item(Z)),
  (check(Y,R);check(S,W,R)),Z=W.

printed(V,C):- 
  try2(V,C),write(C),write(' '),fail.

split(String, Space, [Word|List]) :-
  append(Word, [Space|Tail], String),
  !,
  split(Tail, Space, List).

split(String, _Space, [String]).
输出示例:

?-run.
Enter the sentence : 'saya benci awak'.

i you no.

**事实上没有“benci”,但我需要在输出中显示它--->“i benci you”

尝试在切割后添加一个“全部捕获”规则

check(S,W,R):-
  kamus(S,R),name(S,W), !.

% after edit. HTH    
check(S,_,R):-
  name(S,R).

check(Y,R):-
  item(Z),name(Z,Y), !.

check(Y,Y).
当规则数据库中列出了更合适的规则时,剪切可确保默认值不被使用

编辑:我没有注意到第一次检查有arity3(然后第一次剪切没有用)。当然,另一个违约应该发生在上面提到的地方