Логическое программирование

       

Мутанты


Написать программу, способную производить “мутантов”, т. е. гибридов различных животных. Животные задаются их названиями в виде атомов. Два животных производят на свет мутанта, если окончание названия первого животного совпадает с началом названия второго.

Каждое животное задается с помощью факта  animal(<животное>). Вы должны определить предикат mutant, вызов которого в виде цели mutant(X) сопоставит переменной X различные мутанты.

Вот результаты, полученные на множестве животных (крокодил, черепаха, карибу, лошадь, хамелеон, буйвол, волк):

крокодилошадь,

буйволк,

карибуйвол,

черепахамелеон,

волкрокодил,

волкарибу,

буйволошадь.

Нам необходимо использовать предикат name(?Атом,?Список) - конвертирование атома в список кодов ASCII. Так, например, вызов name(‘волк’,X)?  конкретизирует переменную X=[162,174,171,170].

% Программа "Мутанты"

animal('крокодил').



animal('черепаха').

animal('карибу').

animal('лошадь').

animal('хамелеон').

animal('буйвол').

animal('волк').

animal(X,Y):-

    animal(X),

    name(X,Y).

mutant(Z):-

    animal(_,X),animal(_,Y),

    append(_,[BH|BT],X),

    append([BH|BT],[CH|CT],Y),

    append(X,[CH|CT],Z1),

    name(Z,Z1).



Содержание раздела