首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用(condition -> then_clause;else_clause)时,Prolog中未定义的过程出错

使用(condition -> then_clause;else_clause)时,Prolog中未定义的过程出错
EN

Stack Overflow用户
提问于 2019-10-19 15:47:37
回答 1查看 49关注 0票数 0

我被告知这样的语法(condition -> then_clause;else_clause)允许if(...)do(...)else(...)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
:- lib(fd).

ifs(sel).
ifm(moutarde).
ifld(lesdeux).

ifrien(A) :-
   A#\=sel,
   A#\=moutarde,
   A#\=lesdeux.


selmoutarde(Vars) :-
   Vars = [B, C, D, M],
   Vars :: [sel, moutarde, lesdeux],

   ( not(ifld(C)) ->
      B#=sel
   ;
      true
   ),
   ( ( not(ifs(D)) /\ ifm(D) /\ ifld(D) \/ ifld(M) ) /\ ifs(B) ->
      B#=lesdeux
   ;
      true
   ),
   ( ( not(ifs(D)) /\ ifm(D) /\ ifld(D) \/ ifld(M)) /\ ifrien(B) ->
      B#=moutarde
   ;
      true
   ).

在使用selmoutarde(V)运行它时,我得到了以下错误

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Calling an undefined procedure (not ifs(_485)) /\ ifm(_485) /\ ifld(_485) \/ ifld(_502) /\ ifs(_451) in module eclipse
EN

回答 1

Stack Overflow用户

发布于 2019-10-21 10:43:09

我认为错误的是,你应该在语句的两边再加一对括号。不过,我不是100%确定。但是,不是使用if -> do ; else,,而是执行以下操作可能会有效:(if) -> (do) ; (else).

(我假设Vars的代码是100%正确的,因为我不知道那里发生了什么。因此,如果我说的话是错的,我会提前道歉。)

其次,这段代码not(ifs(D)) /\ ifm(D) /\ ifld(D)不是总是失败的吗?D不能同时是moutardelesdeux,不是吗?

第二个和第三个if语句也是如此。首先确保列表中的Bsel或nothing,然后确保B分别为lesdeuxmoutarde

不管怎样,如果我错了,为什么需要为每个条目创建一个单独的谓词呢?下面的方法不也可以吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ifrien(X) :-
   \+ member(B, [sel, moutarde, lesdeux]).

selmoutarde(Vars) :-
   Vars = [B, C, D, M],
   Vars :: [sel, moutarde, lesdeux],

   ( (C \= lesdeux) ->
      B #= sel
   ;
      true
   ),
   ( ( (D \= sel /\ D = moutarde /\ D = lesdeux \/ M = lesdeux) /\ B = sel) ->
      B #= lesdeux
   ;
      true
   ),
   ( ( (D \= sel /\ D = moutarde /\ D = lesdeux \/ M = lesdeux) /\ ifrien(B) ) ->
      B #= moutarde
   ;
      true
   ).
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58465363

复制
相关文章
prolog实例_prolog实例
Jetbrains全家桶1年46,售后保障稳定 现在打开编辑器GNU-Prolog,打开文件可以直接询问机器:
全栈程序员站长
2022/11/16
1.3K0
学习Lock中Condition的使用
有java开发经验的朋友肯定知道Lock,不管是培训班还是自学,大家知道Lock代替的是synchronized关键字。那么Condition又是在哪里使用呢?
zhangheng
2020/04/28
3.1K0
实战记录—PHP使用curl出错时输出错误信息
踩过的坑,实在不想再踩了,记录记录。 CURL错误列表 curl_exec($ch);//执行curl if (curl_errno($ch)) { echo 'Curl error: ' . curl_error($ch);//出错输出错误 } curl_close($ch);//关闭curl 同理,像正则,Json,数据库这些出错时基本都会有提供有帮助的错误信息 CURL状态码列表 状态码 状态原因 解释 0 正常访问 1 错误的协议 未支持的协议。此版cURL 不支持这一协议。 2 初始
房东的狗丶
2023/02/17
6.1K0
ubuntu gcc编译时对’xxxx’未定义的引用问题
http://www.cnblogs.com/oloroso/p/4688426.html
bear_fish
2018/09/19
8.2K0
AQS——Condition使用
前面我们学习了synchronized同步代码块,了解了java的内置锁,并学习了监视器锁的wait/notify机制。在大多数情况下,内置锁都能很好的工作,但它在功能上存在一些局限性,例如无法实现非阻塞结构的加锁规则等。为了拓展同步代码块中的监视器锁,java 1.5 开始,出现了lock接口,它实现了可定时、可轮询与可中断的锁获取操作,公平队列,以及非块结构的锁。
黑洞代码
2021/01/14
7760
AQS——Condition使用
AQS Condition使用
标题 概述 1.Condition简单使用 2.Condition生产者消费者模型 第1节 Condition简单使用 Condition使用方式如下。 public cl
黑洞代码
2021/01/14
4150
AQS Condition使用
如何修复WordPress中的“建立数据库连接时出错”?
"建立数据库连接时出错",这可能是使用WordPress最常见错误之一,所有使用WordPress建站的用户都可能看到过此消息。不用担心,这是一个非常普遍的问题,有很多解决方法。
晓得博客
2021/05/17
5.4K0
Java-方法重载时 调用未定义的对象属性
public class TestWayReload { int id; String name; String pwd; public TestWayReload(){ System.out.println(“Hellow World!”); System.out.println("################"); }
Fisherman渔夫
2019/07/30
5.6K0
DreamweaverCS6安装时出错的解决教程
目前,CS6 是 Adobe dreamweaver 的最新版本,增强了对 jQuery 、jQuery Mobile 、HTML5 和 CSS3 的支持,优化了FTP功能,及时保存在本地和远程服务器,更有利于团队协作,当然我之前用的是很老的版本,今天同事在安装的时候出现"0xc000007b"错误代码,然后整理里一下解决方案。
李洋博客
2021/06/15
2.8K0
Prolog 语言入门教程
Prolog 是一种与众不同的语言,不用来开发软件,专门解决逻辑问题。比如,"苏格拉底是人,人都会死,所以苏格拉底会死"这一类的问题。
ruanyf
2020/01/21
3.4K0
HttpWebRequest 在出错时获取response内容
HttpWebRequest 请求时,服务器会返回500 501这些错误 并包含错误信息,通过如下代码可以拿到错误信息
冰封一夏
2019/09/11
1.2K0
zblogasp安装时出错,左侧显示无法使用Access数据库
今天突然想起之前的一个网站博客,感觉还不错,但它是zblogasp的,所以想移植到zblogphp版本,但是把网站数据恢复之后登陆后台显示,数据库连接出错,因为asp+access类型,目录位置都对,所以可能是access数据库连接失败。
李洋博客
2021/06/15
4.7K0
【说站】python线程中Condition的原理
1、Python条件变量Condition需要关联互斥锁,同时Condition本身提供了wait、notify、notifyAll方法。
很酷的站长
2022/11/23
3930
【说站】python线程中Condition的原理
ReentrantLock类与Condition类的结合使用
我们在上一篇简单介绍了ReentrantLock类的基本使用,也就是获取锁,与释放锁。那如果我们要实现wait()和notify()等待通知的功能在ReentrantLock类中我们应该怎么办呢。这时我们就要借助一个新类了,它就是Condition类。Condition类也是JDK1.5以后新增的类。它可以实现多路通知功能,也就是说在一个Lock对象中可以创建多个Condition类相当于有多个锁对象,通知的时候可以选择性的进行线程通知,而不是notify()那样是由CPU随机决定通知的是哪个线程,Condition类使它在线程调度上更加灵活。下面我们看一下具体的事例。
吉林乌拉
2019/08/14
1.8K0
Java并发中的Condition是如何实现的
回忆 synchronized 关键字,它配合 Object 的 wait()、notify() 系列方法可以实现等待/通知模式。对于 Lock,通过 Condition 也可以实现等待/通知模式。Condition 是一个接口。Condition 接口的实现类是 Lock(AQS)中的 ConditionObject。Lock 接口中有个 newCondition() 方法,通过这个方法可以获得 Condition 对象(其实就是 ConditionObject )。因此,通过 Lock 对象可以获得 Condition 对象。
Bug开发工程师
2018/12/12
5880
Java并发中的Condition是如何实现的
asp.net网站出错时的处理方法
  web应用程序出错是在所难免的事情,若是我们没有处理好就会出现404或是500的错误页面甚至出错的堆栈信息呈现在用户面前,当服务器出错时我们应该赢IE打开出错网站,才能看到完整的出错信息并分析。现在我们看去看看asp.net网站出错时的处理方法。
会长君
2023/04/26
1.5K0
点击加载更多

相似问题

Prolog未定义过程

11

Prolog中的错误未定义过程

10

Prolog未定义的过程错误?

11

toplevel:未定义的过程Prolog

22

prolog SWI中未定义的过程错误

112
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文