Отладка простой функции пролога - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь написать свою функцию на моде в Прологе с сигнатурой по модулю (A, B, C), где C эквивалентно модулю A B. Это мой код:

modulo(A,B,A) :- A<B. /* Not sure about this part.*/

modulo(A,B,C) :-
A==C -> 
    true ;
    A>C ->
        A1 is A-B,
        modulo(A1,B,C) ;
        false .

По какой-то причине, когда я запускаю этот код, он выдает ошибку «Аргументы не достаточно созданы». Я очень новичок в Прологе, и мне было интересно, если кто-нибудь может помочь мне выяснить, что я делаю неправильно / как это исправить?

Любая помощь будет принята с благодарностью! Заранее спасибо!

1 Ответ

1 голос
/ 04 апреля 2020

Вы, похоже, пытаетесь получить предикат Пролога для возврата либо true, либо false. Это не так, как работает Пролог. Предикат либо успешен, либо неудачен. Они ничего не возвращают.

Кроме этого, ваш код близок.

Первый случай, который вам нужно охватить, это когда A < B.

modulo(A,B,A) :- A < B.

Если A < B и первое и третье слагаемые совпадают, то этот предикат должен быть успешным.

Следующий случай - когда A >= B.

modulo(A,B,C) :-
    A >= B,
    A1 is A - B,
    modulo(A1,B,C).

И это все.

Обратите внимание, я ничего не вернул. Все, что мы хотим сказать, это «удалось ли это».

При попытке ?- modulo(7,7,1). я получаю No., но при попытке ?- modulo(7,2,1). я получаю Yes..

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