Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Курсовые обзорные » Перевірка логічного проходження методом резолюції

Реферат Перевірка логічного проходження методом резолюції





кликати рекурсивно функцію prov, взявши в якості другого аргументу її хвіст і повторювати, поки там не виявиться порожньою список. br/>

nachprov ([X | Xs]): - prov (X, Xs). ([], _).

prov (X, [Y | Ys]): - soed (X, Y, Z), prov (Z, Ys).


Базовим випадком другої функції є умова, коли перший аргумент є порожня функція. Воно виходить в тому випадку, якщо буде знайдена порожня резольвента, тобто пошук закінчений з успіхом. p align="justify"> Функція pusk формує всі можливі комбінації перестановок, і перевіряє можливий варіант на наявність порожній резольвенти. Якщо така знайдена, то перевірка зупиняється і повертається результат True, інакше False програма перевіряє наступний


Реалізація алгоритму мовою Haskell


Розглянемо той же алгоритм і реалізуємо його на Haskell.

Для початку визначимо операцію логічного заперечення. Haskell функціональний мова, тому набагато легше уявити операцію логічного заперечення, як роботу з рядками, тобто, якщо є літер В«АВ», то контрарний йому літер буде утворений шляхом зчеплення двох символів ~ і A, які в результаті утворюють В«~ AВ». Для зчеплення буде користуватися стандартною операцією В«+ +В». p align="justify"> Також необхідно визначити функцію, що визначає контрарний атом. Якщо літер з запереченням, то відсікаємо голову, інакше додаємо в початок символ ~, що позначає логічне заперечення. p align="justify"> cont x


| (head x == '~') = tail x

| otherwise = "~" + + x


1. Функція perestanovka. Реалізація цієї функції відрізняється від тієї реалізації, яка була представлена ​​на Prolog. Реалізація даної функції грунтується на реверсуванні можливих хвостів і наступному зчепленні з усіма підсписків можливих списків. Щоб її організувати, необхідні три функції, кожна з яких відповідатиме за певну дію. p align="justify"> perestanovka :: Eq (a) => [a] -> [[a]]

perestanovka [] = [[]] (x: xs) = scep x (perestanovka xs) :: Eq (a) => a-> [[a]] -> [ [a]] x [[]] = [[x]] x [] = [] x (h: t) = (rev xh) + + (scep xt) :: a-> [a] -> [[a]] x [] = [] xh = [(x: h), (reverse (x: h))]


Функція rev формує дві послідовності нового списку: прямий і зворотний. Якщо преутворений список - порожній список, то результатом буде порожній список (базовий випадок). Інакше формується список, який складається з двох списків: перший сформований додаванням першого аргументу до списку, а другий, реверсированием першого списку. p align="justify"> Функція scep. Ця функція В«перемножуєВ» перший аргумент на список, в результаті якого повертається список списків. Для коректного виходу, необхідно два базових випадку:

а) умова перемноження порожнього списку на деяку змінну,

б) умова перем...


Назад | сторінка 5 з 8 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Програма &Список комерційних банків& на мові Сі
  • Реферат на тему: Зв'язний список футболістів
  • Реферат на тему: Список загроз безпеки для території проживання
  • Реферат на тему: Анотований список гедзів Костанайської області
  • Реферат на тему: Птахи Богословського кладовища Санкт-Петербурга: список і розподілення