prolog表示不等式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了prolog表示不等式相关的知识,希望对你有一定的参考价值。

用prolog语言表示一个事实:
X 口服 一次0.4~0.8mg 一日0.8~1.6mg
不能用汉语表示 只能用英文字母 在推理机里运行

参考技术A 事实的语法结构是 pred(arg1, arg2, arg3, ...).
pred是事实,arg是参数,参数可以是整数,原子,变量或结构;
可表示为prescription ('X', '口服', '一次0.4~0.8mg', '一日0.8~1.6mg' ).
参考技术B 其实rayluoluo的回复已经差不多是这个意思了,只不过还不满足楼主的要求,写一个谓词
prescription(Name,Method,OnceLow,OnceUp,DayLow,DayUp)的谓词就可以了
prescription(x,persral,0.4,0.8,0.8,1.6)这样应该就满足了吧追问

如果在tuProlog推理机里有
prescription(Name,Method,OnceLow,OnceUp,DayLow,DayUp).
prescription(x,personal,0.4,0.8,0.8,1.6).
那想用上面的事实判断 “一个人 一次0.5,一天1.5。”应该是成立的吧
怎么表示 请指导一下

追答

这样写可以吧大概
advisable(Person,Once,Day):-
prescription(_,persral,OnceLow,OnceUp,DayLow,DayUp),
OnceLow<=Once,
Once<=OnceUp,
DayLow<=Day,
Day<=Dayup.

反正大概这个规则差不多,意思是这样,具体两个谓词怎么写还是得你自己去写的,我也不知道信息要加什么

Prolog图表表示缺少事实

我在Prolog中有一个带边的图形。我将图表表示为一组序言事实。例如s(a,b,2). = b是a的继承者。以下是此图表的prolog事实。

Graph rep

事实:

s(a,b,2).
s(a,c,1).
s(b,e,4).
s(b,g,2).
s(c,d,1).
s(c,x,3).
s(x,g,1).
goal(g).

我在这里错过了一个事实吗? s(e,g,1).哪里g是e的继承者?或者甚至在这个节点上搜索,因为“b”只有2个分支“e”和“g”。有人可以向我解释一下吗?谢谢

答案

我们可以例如以breadth-first [Wiki]方式枚举图形,从而确定边缘是:

s(a, b, 2).
s(a, c, 1).
s(b, e, 4).
s(b, g, 2),
s(c, d, 1).
s(c, x, 3).
s(e, g, 1).
s(x, g, 1).
goal(g).

如果我们看一下原始的源代码。 s(e, g, 1).部分失踪了。

以上是关于prolog表示不等式的主要内容,如果未能解决你的问题,请参考以下文章

不等式基础

利用单位圆怎样解三角函数不等式

四边形不等式优化

hiho #1223 不等式

hihoCoder1223 不等式

[HDU2829] Lawrence [四边形不等式优化dp]