首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog约束求解器

Prolog约束求解器
EN

Stack Overflow用户
提问于 2016-10-11 23:44:14
回答 1查看 152关注 0票数 0

我正在研究Prolog中的以下问题:

五名病人,都做了血液测试,在医生的手术中等待,从左到右坐在长凳上,最左边的位置是第一位。确定每个病人的位置,以及她或他的血型、年龄、身高和体重。他们的年龄分别是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. 法拉60岁了。
  9. 血A型的人比法拉小55岁,比法拉高17英寸。
  10. 旁边是9岁的人,而不是在65英寸高的人旁边,是B型血,体重125磅。

定义谓词病人(表),其中table是一个表,其中从1到5的行以左到右的顺序描述坐在长凳上的人。列的顺序是人名、血型、年龄、身高和体重。Table的一个示例值可以是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]。

我认为我非常接近解决方案,尽管我的程序没有正常运行。我将粘贴我的代码如下:

代码语言:javascript
复制
:- 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).

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2016-10-12 00:17:05

我发现了问题:我必须加载clpr库,并从约束中删除年龄()、身高()和权重()项。实际上,我完全是因为不需要它们才把它们移走的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39988432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档