ПредишенСледващото

15:55 - Най-големият общ делител на Пролог

GCD Prolog

описани Prolog факти. Prolog програма отговаря на въпроси като "дали твърдението е вярно? "Или" какво, ако X е вярно това твърдение? ". Ето защо, програмата се изчисли най-голям общ делител на две числа трябва да работи по следния начин:
  • Вярно е, че ГРУ (22, 121) = 3 е?
  • В кой истински израз на ГРУ (22, 121) = G G?
В пролога е писано, съответно:
  • gcd2 (22, 121, 3).
  • gcd2 (22, 121, G).

Традиционно, ГРУ се иска от Евклидовата алгоритъм, който е в сила факт: НОД (а, 0) = а. Този факт в Prolog се изписва така: gcd2 (A, 0, A). gcd2 на въпрос (11, 0, G) ще бъде отговорено G = 11. и отговорът на gcd2 на въпрос (11, 0, 3) е отрицателно.

Фактът, че GCD (а, Ь) = грам, се изписва като: gcd2 (A, B, G). Задавани gcd2 (22, 121, 11) положителен отговор да се обърне gcd2 на въпрос (16, 32, 8) - отрицателен и gcd2 на въпрос (22, 121, G) - G = 11.

Същността на Euclidean алгоритъм че GCD (а, Ь) = д, ако GCD (б, п) = д, където п - остатъка от делене на б. Prolog е написано, както следва:

Рано или късно, N ще бъде равна на нула, и проверка действителност gcd2 (A, B, G). ще бъде намалено на проверката на действителност gcd2 (Х, 0, X). т.е. равенство на първия и третия параметър.

минималната програма

Минимална (погрешно), програмата се записва в gcd.pl файл и изглежда така:

Тази програма няма да работи, защото рано или късно ще има деление на нула. Фактът, че Prolog програмата търси всички възможни решения, не спират на първия ред. За стена от това, трябва да се добави, като минимум, на условие B = \ = 0 (Б, не е нула)

Още по-добре, да зададете положителната А и Б:

За да тествате използването GNU Prolog 1.3.1. Файлови разширения: PL и PRO, например hello.pl. gcd.pro. Първият вариант е приоритет (ако не е посочено разширението), но конфликти с Perl: ако директорията съдържа файлове и gcd.pl gcd.pro. след това се зарежда gcd.pl (с грешка, ако тя Pearl :-) Така че по-добре да се уточни името на файла в пълен размер, затворени в единични кавички (за една точка в името).

пълна програма

Описание GCD за списък с номера:

Преобразуване на списък с низове в списък с номера (или обратното, това е пролог):

Той гласи, както следва: списък на низове е да се представи списък с номера, ако на първия ред е представяне на първия ден, а останалата част от списъка на стрингове е представяне на останалите списък числа. Задавани str2int ([ "22", "11"], [22, 11]), положителен отговор ще бъде даден на въпрос str2int ([ "22", "11"], X) отговор X = [22, 11 ]. str2int на въпрос ([X, "11"], [22, Y]) отговор X = '22', Y = 11.

Началната точка в програмата (факт, който трябва да се провери веднага след стартиране на програмата):

Подкрепете проекта - споделете линка, благодаря!