ign="justify"> nachprov [] = True
nachprov (x: xs) pr x xs
pr x (y: ys)
| x == [] = True
| ys == [] = if (soed xy) == [] then True else False
| otherwise = pr (soed xy) ys
Розглянемо структуру допоміжної функції pr. Якщо в неї передається порожній параметр в якості першого аргументу, значить (при коректному введенні даних) це результат функції soed. Отже, при розглянутої комбінації, порожня резольвента знайдена і ми завершуємо роботу з позитивним результатом. В іншому випадку об'єднуємо голову з результатом виконання, цілком можливо, що хвіст стане порожнім. Розглянемо цей випадок окремо: якщо до того як хвіст став рівним [] в результаті функції виявився теж порожній список, значить порожня резольвента знайдена. В іншому випадку ми рекурсивно викликаємо goprov, як і у всіх інших випадках. p align="justify"> Для зручності запуску реалізуємо операцію pusk, яка приймає вхідний список, формує комбінації і перевіряє кожен з варіантів.
pusk x = prov (perestanovka x)
Ця функція видасть відповідь True або False.
Приклади роботи програм
1. Приклад роботи програми мовою Prolog:
? - Pusk ([[a, s, $ b, $ c], [$ a, b], [$ s, c]]). p align="justify">? - Pusk ([[a, s, $ b, $ c], [$ a, $ b], [$ s, c]]). p align="justify"> 3. Приклад роботи програми мовою Haskell:
Main> pusk ([[В«aВ», В«sВ», В«~ bВ», В«~ cВ»], [В«~ aВ», В«bВ»], [В«~ sВ» , В«cВ»]]).> pusk ([[В«aВ», В«sВ», В«~ bВ», В«~ cВ»], [В«~ aВ», В«~ bВ»], [В«~ sВ» , В«cВ»]]).
Висновок
Отже, мета курсової роботи досягнута: перевірка логічного проходження методом резолюції на Prolog і на Haskell реалізована. Завдання справно працюють. Матеріал поданий на лекціях закріплений. br/>
Список літератури
1. Братко І., Програмування на мові Пролог для штучного інтелекту [Текст - Москва, "СВІТ", 1990. p align="justify"> 2. Роганова Н.А., Функціональне програмування [Текст] - ГІНФО, 2002. br/>
Додаток А
Лістинг програми на мові Prolog
$ ($ X): - X. (X, [X | _]). (X, [_ | Xs]): - vhodit (X, Xs). (X, [X | Xs], Xs). (X, [Y | Ys], [Y | Z]): - udalit (X, Ys, Z). (X, [$ X | _]). (X, [_ | Xs]): - contrar (X, Xs). ($ X, [X | _]). ($ X, [_ | Xs]): - contrar ($ X, Xs). ([], []) . (Z, [X | K]): - udalit (X, Z, Z1), perestanovka (Z1, K). ([], X, X). ([X | Xs], Y, [X | Z ]): - not (vhodit (X, Y)), not (contrar (X, Y)), soed (Xs, Y, Z). ([X | Xs], Y, Z): - vhodit (X...