prolog相关内容
http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_1.html 所以在它有的那个教程上: 冲突(着色):-相邻(X,Y),颜色(X,颜色,着色),颜色(Y,颜色,着色). 我理解正确吗,Color 是一个变量,在第一次调用 color 后设置为一个值,然后在第二次调用 color? 解决方案 Prolog 中的变量:
..
可能重复: 在Prolog中逐行读取文件 我发现以下序言代码一次读取一个字符并打印出来. 进程(文件):-open('C:/Users/BHARAT/Desktop/a.txt', 读取, In),get_char(In, Char1),process_stream(Char1, In),逼近).process_stream(end_of_file,_):-!.流程流(字符,输入):-打
..
所以当我实例化我的整数变量时,我所有的树代码都不能正常工作.这是我的意思的一个例子: % 关联一棵树和该树中的节点数(顺序)树顺序(空,0).树顺序(树(_,Left_Subtree,Right_Subtree),顺序):-订单#>0,订单 #= Left_Subtree_Order + Right_Subtree_Order + 1,tree_order(Left_Subtree, Left_
..
我正在考虑如何将两个列表的所有元素相乘.然后我想把所有结果放在 List3 中.例如, List1 = [1,3,5].列表 2 = [2,6,7]. List3应包含 [1x2, 1x6, 1x7, 3x2, 3x6, 3x7, 5x2, 5x6, 5x7].最后; List3 = [2, 6, 7, 6, 18, 21, 10, 30, 35]. 有可能做到吗?怎么做?我找不到正确的方
..
我在 Prolog 中做一个非常简单的练习,在跟踪中有一些我不明白的东西.该程序是对表示为后继的整数的“大于"(>): greater_than(succ(_), 0).大于(成功(A),成功(B)):-大于(A,B). 我的问题:我不明白为什么请求 greater_than(succ(succ(succ(0))),succ(0)) 会在以下跟踪: [trace] ?-greater_tha
..
我正在努力解决以下问题,使用 prolog 将一个集合划分为 n 个子集. 例如,我给程序作为输入:X = [1,2,3,4], N=3 我得到 Res = [[1,2], [3], [4]]水库 = [[1,3], [2], [4]]水库 = [[1,4], [2], [3]]水库 = [[2,3], [1], [4]]水库 = [[2,4], [1], [3]]水库 = [[3,4],
..
我想写一个谓词convert/2.它应该像这样工作 ?- 转换([a,[a,a],[a,b],[b,a],[[a,b]],[d],c],X).X = [a,c,[a],[d],[a,b],[[a,b]]]是的?- 转换([[a,[a,b]],[a,[c,b]],[[a,b],a]], X).X = [[a,[a,b]],[a,[b,c]]]是的?- 转换([[a,b],[a,[a]],[a,b,
..
我是 Prolog 的新手,我想更改从列表中提取的变量的值.最初,变量是 n,然后在某些情况下我想将其更改为 a.但是使用 (is)/2 是行不通的,因为它只对数字进行操作. 有没有简单的方法来做到这一点?假设我的代码如下所示: change([H|T]) :- 将 H 设置为 a,change(T).改变([]). 注意 H 已经设置为 n,所以目标 H = a 失败,因为 n 和a不
..
我正在尝试使用 Prolog 解决爱因斯坦之谜.当我试图通过房屋(Hs)运行时,它显示 No. Task is 英国人住在红房子里. 瑞典人将狗作为宠物饲养. 丹麦人喝茶. 绿房子就在白宫的左边. 温室的主人喝咖啡. 抽 Pall Mall 烟的店主养鸟. 黄房子的主人抽登喜路. 住在中心屋的主人喝牛奶. 挪威人住在第一所房子里. 抽 Blends 的主人住在养猫的主人旁边
..
作为 Prolog 的新手,我正在寻找一种计算列表中反转次数的好方法. 我知道如何使用 flatten(Matrix, FlatMatrix) 来展平矩阵,从而创建一个包含矩阵中单个元素集的变量.但是,我不确定如何查找该列表中的反转数. 据我了解,从 0...n 开始的数字矩阵中的求逆次数是小于被比较数字的元素总数(如果我在这方面有误,请纠正我). 我对 setof/3 在 Pr
..
我需要创建一个接收数字列表的谓词,并仅打印以 7 结尾且其数字之和大于 100 的数字 我为分离做了谓词,但我需要帮助将两个谓词合并,我的意思是这两个谓词进入一个唯一的谓词,这是我到目前为止所做的: %总和大于 100多(X):-0 是 X 模 100总和([],0).总和([P|Q],Z).多(P),总和(Q,Z1),Z是P + Z1.总和([P|Q],Z).不是多(P),总和(Q,Z)
..
我有这段代码(迭代深化以找到最短路径): arc(a, g).弧(a,b).弧(b,g).路径(X,Z,路径):-长度(路径,_),path_r(X,Z,路径).路径_r(Z,Z,[]).path_r(X, Z, [X|路径]) :-弧(X,Y),路径(Y,Z,路径). 当我追踪它时,它给了我一条痕迹: 2 2 重做:length([],0) ? 这里发生了什么?另外,该行左侧的 2 2
..
我正在尝试使用 SWI-Prolog 导入 Aleph.当我运行我的程序时,我收到以下错误.导入 library(aleph) 需要做什么?顺便说一句,我已经为我的程序下载了 aleph.pl.这是我的测试程序,我知道库 aleph 一定有问题. :- use_module(library(aleph)).:- 阿列夫. 我得到了错误: 错误:c:/users/mac/desktop/swi
..
我无法理解序言,我必须在列表中查找 X 是否在 Y 之前. 所以我有一个空列表的基本情况 before(X, Y, [ ]). 现在我知道我想检查 List 中 X 的索引和 Y 的索引,如果 indexX
..
美好的一天,我正在做序言中的算术问题,是的,它是我搜索过的点产品,发现一堆乱七八糟的代码,与本书所问的内容不符.它是/3,所以这是我到目前为止所拥有的,但我需要将两个列表的乘积结果相加.关于应该推荐做什么的任何提示? dot([HD|TL],[HD2|TL2],Result):-Mul是HD2 * HD,点(TL,TL2,Mul),结果是 Mul + Reuslt2.点([],[],0).
..
我一直在尝试学习 prolog,我想使用列表的第二个元素作为快速排序的枢轴. 我想用 [Head |[枢轴|Tail] ] 作为方法中的输入会起作用,但是我不确定我可以在哪里放置“Head",即第一个元素. 像这样: qsort([],[]):- !.qsort([头部|[枢轴|尾部]],排序):-拆分(枢轴,[头|尾],更少,更大),qsort(Less,SortedLess),q
..
您好,我正在尝试在 Prolog 中编写一个程序,给定一个列表,它计算列表中每个连续元素的出现次数,如下所示: count(1,[1,1,1,2,2,2,3,1,1],0,X) 结果将是 X=[ [1,3],[2,3],[3,1][1,2] ]也就是每个子列表是 [element,occurrences] 就我而言,我认为基本情况有问题,但我无法解决.你能帮帮我吗? % 将一个元素添加
..
许多论文确实指出,当 occurs_check=true 时,如下所示的等式统一问题可能会在指数时间内运行.没有规定这是顶级查询还是子句体,只是等式统一问题: X1 = f(X0, X0),X2 = f(X1, X1),..Xn-1 = f(Xn-2, Xn-2),Xn = f(Xn-1, Xn-1). 如果为真,这可能是发生检查的最坏情况,因为正常的变量共享统一是线性的.是否每个 Prol
..
List1=[(x,1),(y,1),(z,1)] 我正在尝试拆分此列表: 分成两个列表: List3=[x,y,z]列表 4=[1,1,1] 所以我写了这个谓词来尝试这样做: splt([], [], []).splt([X|Xs], [Y|Ys], [X,Y|Zs]) :-分裂(Xs,Ys,Zs). 但是,谓词返回的不是期望的结果: 1 ?- splt([(x,1),(y,2
..
这是来自 Mat 的 回答 从这里开始 e([number(0)] , t1 , Uc0 , Uc0, Bc0 , Bc0) -->[].e([number(1)] , t2 , Uc0 , Uc0, Bc0 , Bc0) -->[].e([number(2)] , t3 , Uc0 , Uc0, Bc0 , Bc0) -->[].e([op(neg),[Arg]] , u1(E) , [
..