2016-10-11 3 views
0

Я работаю над следующей проблемой в Прологе:Пролог решатель

Пять пациентов, все имеющие анализы крови, которые ждут в кабинете врача и сидят на скамейке слева направо, где в крайнее левое положение является первым. Определите положение каждого пациента вместе с группой крови, возрастом, высотой и весом группы . Их возраст составляет 5, 9, 30, 46 и 60. Их высота составляет 40, 48, 60, 65 и 74. Их веса 40, 75, 96, 125 и 165.

  1. Человек на дальнем право на 37 лет старше Лейлы и составляет 60 дюймов в высоту.
  2. Лейла весит 56 фунтов больше, чем ее высота.
  3. Алиса весит 75 фунтов и имеет высоту 74 дюйма.
  4. Али - тип AB и весит 56 фунтов меньше, чем Лейла.
  5. Человек в центре 9 лет, имеет тип AO крови и весит 96 фунтов.
  6. Адам, который является первым, имеет высоту 65 дюймов и весит на 100 фунтов больше его высоты.
  7. Человек, который является кровью типа O, на 25 лет старше человека слева от них.
  8. Farah - 60 лет.
  9. Человек, который является кровью типа A, на 55 лет моложе Фары и на 17 дюймов выше Фары.
  10. Человек, который находится рядом с 9-летним, но не рядом с человеком, который составляет 65 дюймов в высоту, является кровью типа B и весит 125 фунтов.

Определите пациентов предиката (таблица), где Таблица представляет собой таблицу, где строки от 1 до 5 описывают людей, сидящих на скамейке слева направо. Столбцы находятся в имени человека последовательности, группе крови, возрасте, высоте и весе. Примерное значение для таблицы может быть Table = [['Adam', 'A', 5, 40, 40], ['Ali', 'AB', 9, 48, 75]], ['Alice', 'AO ', 30, 60, 96], [' Farah ',' B ', 46, 65, 125], [' Leila ',' O ', 60, 74, 165]].

Я думаю, что я очень близок к решению, хотя моя программа работает неправильно. Я вставлю свой код ниже:

:- op(100,xfy,on). 

age(5). age(9). age(30). age(46). age(60). 
height(40). height(48). height(60). height(65). height(74). 
weight(40). weight(75). weight(96). weight(125). weight(165). 

patients(Table) :- 

    makebench(5, Table), 
    Table = [_, _, _, _, [_, _, Age5, 60, _]], 
    ['Leila', _, AgeLeila, HeightLeila, WeightLeila] on Table, 
    ['Alice', _, _, 74, 75] on Table, 
    ['Ali', 'AB', _, _, WeightAli] on Table, 
    Table = [_, _, [_, 'AO', 9, _, 96], _, _], 
    Table = [['Adam', _, _, 65, 165], _, _, _, _], 
    rightof([_, 'O', A, _, _], [_, _, A1, _, _], Table), 
    ['Farah', _, 60, HeightFarah, _] on Table, 
    [_, 'A', 5, H, _] on Table, 
    Table = [_, _, _, [_, 'B', _, _, 125], _], 

{ Age5 = AgeLeila + 37, 
    WeightLeila = HeightLeila + 56, 
    WeightAli = WeightLeila - 56, 
    A = A1 + 25, 
    H = HeightFarah + 17, 
    age(Age5), 
    age(AgeLeila), 
    weight(WeightLeila), 
    height(HeightLeila), 
    weight(WeightAli), 
    height(HeightFarah)}. 

makebench(0, []). 

makebench(N, [[_, _, _, _, _]|List]) :- 
    N > 0, N1 is N - 1, makebench(N1,List). 

X on [X | _]. 
X on [_ | R] :- X on R. 

sublist(S, L) :- add(S, _, L). 
sublist(S, [_ | T]) :- sublist(S, T). 

add([], L, L). 
add([X | R], Y, [X | T]) :- add(R,Y,T). 

rightof(H1, H2, L) :- sublist([H2, H1], L). 

Любая помощь приветствуется.

ответ

0

Я понял, что проблема: мне пришлось загрузить библиотеку clpr и удалить ограничения age(), height() и weight() из ограничений. Фактически, я удалил их полностью, потому что они не были нужны.

Смежные вопросы