晚上好,在解决了我之前解释的here问题之后,我在Prolog版本上遇到了一些问题:
比较规则:给定两个自定义对象,该方法找到它们之间的第一个相等字符。
int index = myObject1.Index;
char myChar = myObject1.getChar();
while ((index < 6) && !(myObject2.getChar().Equals(myChar)))
{
index++;
myChar= myObject1.getCharAt(index);
}
myObject1.Counter++;
(不起作用的解决方案)
[Closing rule]
compare_rule(I,Obj1,Obj2) :-
getChar(Obj2,Char2),
getChar(Obj1,Char1),
Char1 == Char2;
I == 6.
[Recursive rule]
compare_rule(I,Obj1,Obj2) :-
getChar(Obj2,Char2),
getChar(Obj1,Char1),
I < 6, Char1 == Char2,
I1 is I+1,
compare_rule(I1,Obj1,Obj2).
规则应该返回带有新索引的Obj2和一个递增1的计数器:我该怎么办?
非常感谢你, 马蒂亚
答案 0 :(得分:0)
我完全不接受你的问题。
无论给予字符串S0
和S1
,common(S0, S1, I0, I1)
将I0
和I1
与S0
的第一个共同字符的位置统一起来分别和S1
。如果没有,则失败。您可以添加I0 < 6
以仅获取S0
前6个字符的解决方案。
common([C|_], S1, 1, I) :-
contains(C, S1, I).
common([C|S0], S1, I0, I1) :-
\+ contains(C, S1, I),
common(S0, S1, I, I1),
I0 is I + 1.
contains(C, [C|_], 1).
contains(C, [C0|T], I) :-
C \= C0,
contains(C, T, I0),
I is I0 + 1.
我想你不应该尝试将转换 C#转换为Prolog。相反,请考虑C#程序的功能并构建具有相同效果的Prolog程序。他们将不同的代码从一个代码转换为另一个代码,并以目标语言获得合理的代码。