Автор Тема: Haskell/Prolog  (Прочитано 2641 раз)

Оффлайн Романтик

  • Продвинутый
  • *****
  • Сообщений: 1182
  • Карма: +33/-0
    • Просмотр профиля
Haskell/Prolog
« : 30 Апреля 2007, 15:40:03 »
Есть функция для роверки логического следования методом резолюции для 2х диъюнктов

unions :: [String] -> [String] -> [String]
unions [] x = x
unions x y
   |(not (elem (head x) y)) && (not (conflict (head x) y)) = (head x) : unions (tail x) y
   |elem (head x) y = unions (tail x) y
   |conflict (head x) y = unions (tail x) (delete (contr (head x)) y)
   |otherwise = unions (tail x) y  

Нужно написать функцию для неё формирования списков списка, аналогично как в прологе

combinations([ ], [ ]).
combinations( L, [X | Р] )
         :- del( X, L, L1), combinations( L1, Р).

unions([X|Xs], Y, [X|L])
          :- not(prin(X, Y)), not(conflict(X, Y)), unions(Xs, Y, L).
unions([X|Xs], Y, L)
          :- prin(X, Y), unions(Xs, Y, L).
unions([X|Xs], Y, L)
          :- conflict(X, Y), del($X, Y, R), unions(Xs, R, L).

unions([$X|Xs], Y, [$X|L])
          :- not(prin($X, Y)), not(conflict($X, Y)), unions(Xs, Y, L).
unions([$X|Xs], Y, L)
          :- prin($X, Y), unions(Xs, Y, L).
unions([$X|Xs], Y, L)
          :- conflict($X, Y), del(X, Y, R), unions(Xs, R, L).

go(X) :- combinations(X, L), startcheck(L).

Помогиет кто шарит, с меня причитается) :boast:

Оффлайн Михаил

  • Продвинутый
  • *****
  • Сообщений: 1207
  • Карма: +7/-0
  • добрый_хомяк
    • Просмотр профиля
Haskell/Prolog
« Ответ #1 : 24 Сентября 2007, 21:43:58 »
мне млять. это что-то страшное. и слова нерусские!!чур меня , чур!! :1:  :1:
Если глупый лекарство дает тебе - вылей
Если мудрый подаст тебе яду - прими

Оффлайн Романтик

  • Продвинутый
  • *****
  • Сообщений: 1182
  • Карма: +33/-0
    • Просмотр профиля
Haskell/Prolog
« Ответ #2 : 24 Сентября 2007, 23:56:30 »
Цитировать
тебе не кажется что либо тут этим никто не занимается .. либо ты чем то нитем занимаешься ;)
[snapback]35626[/snapback]
Искуственный интеллект - для избранных.