首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数返回"No Solution“而不是"Nothing”

函数返回"No Solution“而不是"Nothing”
EN

Stack Overflow用户
提问于 2011-09-30 21:55:44
回答 1查看 367关注 0票数 9

我有一个标准的数据类型来表示谓词逻辑的公式。表示析取的自然演绎消除规则的函数可能如下所示:

代码语言:javascript
复制
d_el p q =
  if p =: (Dis r s) && q =: (Neg r) then Just s else
  if q =: (Dis r s) && p =: (Neg r) then Just s else
     Nothing where r,s free

x =: y = (x =:= y) == success

当统一失败时,该函数不会返回任何值,而是在PACKS中不返回任何解决方案

代码语言:javascript
复制
logic> d_el (Dis Bot Top) (Not Bot)
Result: Just Top
More Solutions? [Y(es)/n(o)/a(ll)] n
logic> d_el (Dis Bot Top) (Not Top)
No more solutions.

我遗漏了什么,当统一失败时,为什么el不计算为Nothing

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-03 18:13:35

这似乎不是使用等式约束的最佳方式。当a =:= b失败时,complete function子句也会失败。

例如:

代码语言:javascript
复制
xx x = if (x =:= 5) == success then 1 else x
xx x = 3

计算xx 7的结果是3 (而不是7),因为7 =:= 5完全终止了xx函数的第一个子句。

我认为代码应该是这样的:

代码语言:javascript
复制
d_el p q = case (p,q) of
   (Dis a s, Neg b) -> if a == b then Just s else Nothing
   (Neg a, Dis b s) -> if a == b then Just s else Nothing
   _ -> Nothing
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7611426

复制
相关文章

相似问题

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