Конвертировать C # в код Prolog: рекурсивный цикл while - PullRequest
1 голос
/ 04 сентября 2011

Добрый вечер, после решения моей предыдущей проблемы, объясненной здесь , у меня есть несколько последних проблем с версией 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: как я могу это сделать?

Спасибо, Маттиа

1 Ответ

0 голосов
/ 09 октября 2011

Я не совсем понял ваш вопрос.

  • Как определяются ваши объекты?В частности, что возвращает getChar ()?
  • Почему объекты встречаются в вашем коде Prolog?Пролог не является объектно-ориентированным.

Независимо от того, что дано для строк S0 и S1, common(S0, S1, I0, I1) объединяет I0 и I1 с позициями первого общего символаS0 и S1 соответственно.Если его нет, он терпит неудачу.Вы можете добавить I0 < 6, чтобы получить решения только для первых 6 символов S0.

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 # в Пролог.Вместо этого лучше подумайте о том, что делает программа на C #, и постройте программу Prolog, которая дает тот же эффект.Они должны преобразовывать код из одного в другой и получать разумный код на целевом языке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...