首页 文章
  • 1 votes
     answers
     views

    处理来自prolog语句解析器的信息

    我在prolog中创建了一个句子解析器 . 它成功解析输入的句子... ?- sentence([input,sentence,here],Parse). 这是我用来解析句子的代码: np([X|T],np(det(X),NP2),Rem):- /* Det NP2 */ det(X), np2(T,NP2,Rem). np(Sentence,Parse,Rem):- np2(S...
  • 0 votes
     answers
     views

    Prolog:如何获取从起始节点到目标节点的路径

    我正在尝试编写一个代表目标节点 G 的prolog程序,并将从一个名为 get_path(StartNode, Path) 的谓词返回一个节点列表,从开始节点到目标节点 . 我有一组节点,每个节点都有一个启发式值,一些从一个节点到另一个节点的后继弧,以及这样做的成本 . 每个的启发式值是: h(a,12). h(b,8). h(c,4). h(d,3). h(f,5). h(e,5). h(g,0...
  • 9 votes
     answers
     views

    Prolog中的广度优先

    在Prolog中使用广度优先于默认深度优先搜索方案的一般思路是什么? 没有采取无限的分支? 在Prolog中有没有使用广度优先的一般方法?我一直在谷歌搜索,我没有找到太多有用的新手信息 .
  • 0 votes
     answers
     views

    prolog图深度优先搜索

    我已经看到了关于深度优先搜索的其他问题,但我的问题略有不同,我真的不明白 . 在prolog中,我代表我的无向图,如下所示: [0-[1,5], 1-[0,2], 2-[1,3], 3-[2,0], 5-[0]] 这是一组键值,其中键表示节点和列表: -[] 表示其邻居 . 我不知道如何使用此模型进行深度优先搜索 . 我尝试了很多解决方案 . 我想要一个非常基本的递归算法,如下所示: dfs(v,...
  • 10 votes
     answers
     views

    prolog深度第一次迭代加深

    我试图实现深度优先深度搜索状态空间图 . 我有一个带有三个顶点的图形,它们是两个激活边和两个禁止边 . 每个节点都有一个二进制值,统称这是图的状态 . 通过查看其中一个节点是高于阈值还是低于阈值(通过对所有传入节点求和计算),图形可以转换到新状态 . 每个转换最多只有一个节点会发生变化 . 由于它们是三个节点,它们是三个状态转换边缘,在状态转换图中留下每个状态 . 我认为我的state_chan...
  • 1 votes
     answers
     views

    Prolog打印阵列失败

    我对Prolog很新,我遇到以下问题: 我代表一个二维数组如下: [[ROW1], [ROW2],..] 我编写了一个谓词来打印出二维数组,如下所示: valueAt(1, [BEGIN | _], BEGIN). valueAt(POSITION, [FIRST | REST], VAL) :- NPOS is POSITION - 1, ...
  • -1 votes
     answers
     views

    Prolog - 创建谓词

    我试图在Prolog中创建的谓词(通过命令行通过断言等)在理论上相当简单 . 第一个是第二个(X,List),它检查X是否是指定列表的第二个元素 . 另一个被调用两次([list],X),其中在左参数中放置一个列表就像这样打印该列表:[a,b,c]变为[a,a,b,b,c,c] 另外,使用相同的谓词,但右边的参数而不是左边的参数应该产生如下结果:[a,a,b,b]变为[a,b] 我真的不知道如何去...
  • 7 votes
     answers
     views

    如何在Prolog中关闭“true”和“false”输出?

    我想用Prolog写一个基于文本的小型冒险游戏(这可能是一个愚蠢的想法,但我不在这里讨论) . 唯一的问题是我无法在屏幕上打印文本而不显示“true”和“false”值 . 例如,如果我尝试类似的东西: take(desk) :- write('This thing is way too heavy for me to carry!'). 其中 take 是一个地方谓词, desk 是我得到的一...
  • 0 votes
     answers
     views

    使用Prolog以批处理模式打印出一个结果

    在Prolog中,我可以调出REPL来交互式地测试Prolog代码(交互模式),我还可以将代码写在要从命令行执行的文件中(批处理模式) . 在交互模式下,我使用 setof 函数来获取所有结果 . ?- [likes]. ?- setof(X, likes(sam, X), L). L = [chips, chop_suey, chow_mein, dahl, kurma, pizza, spag...
  • 1 votes
     answers
     views

    Prolog:一起剪切谓词和分号以获得TRUE

    我是Prolog的新手,我正面临一些练习,例如这个让我写一个谓词直方图/ 1来取一个列表作为参数并打印一个水平直方图,列表中出现数字0..9 . 例如: ?- histogram([1,3,4,1,1,4,7]). 0 1 *** 2 3 * 4 ** 5 6 7 * 8 9 true. 我的程序如下,并按要求工作,但我有一个疑问:你可以看到我用这种方式使用cut谓词和...
  • 1 votes
     answers
     views

    Prolog打印所有解决方案并希望获得是/否输出

    我刚刚开始学习Prolog,我的任务是写一个谓词poklapanje(M,V),如果列表M的所有元素都是列表V的第一个元素,则返回yes,例如poklapanje([1,2],[1, 2,3])应该返回是 . 我的第一个问题是真实和是的区别是什么,因为我在我的解决方案中变得真实?第二,当我输入poklapanje(X,[1,2,3])时,我应该得到: X = []; X = [1]; X = [1...
  • 2 votes
     answers
     views

    Prolog中两个字符串的交集

    以前试过,但对我来说仍然有点乱 . 认为这是最长的后续,但实际上并非如此 . 所以用更好的例子来写它 . 我正在尝试编写一个Prolog谓词来比较两个字符串,看它们是否具有相同的元素并将它们打印出来(每个成员只有一次) . 目前我已经写了这个以将字符串放入2个不同的列表中以便于检查: 但是,我无法找到正确的方法来比较这两个列表中的每个元素,无论它们在哪里 . 我找到了比较的方法,直到它找到一个并且...
  • 1 votes
     answers
     views

    简单的Prolog程序:“参数没有充分实例化”错误

    我正在写一个Prolog谓词,从编号列表中删除前三个元素并打印结果 . 编号列表的示例: [e(f,1),e(o,2),e(o,3),e(b,4),e(a,5),e(r,6)]. 普通列表的原始谓词如下所示: strim([H|T],R) :- append(P,R,[H|T]), length(P,3). 因此,由于长度谓词也适用于编号列表,我只需要编写谓词,将一个编号...
  • 9 votes
     answers
     views

    模式匹配Haskell中的等效变量,就像在Prolog中一样

    在prolog中,我们可以执行以下操作: myFunction a (a:xs) = ... 这是,当 myFunction 的第一个参数与第二个参数中列表的第一个项相同时,此函数将计算为 ... . 我现在的问题是......如何在Haskell中完成类似的事情?我认为Prolog的模式匹配比Haskell更具表现力 . 我一直在尝试在Haskell中编写代码并且我遇到了麻烦 - 要么我使用...
  • 0 votes
     answers
     views

    在Prolog中测试 . 如何运行单元测试来检查我的输出文件是否与我的文本文件匹配?

    我正在使用prolog(swipl)实现一个自然语言生成器 . 我有一个.txt测试文件,其中包含一些我应该能够以这种格式生成的短语: [goal,identify,type_object,animal,object,cat,event,ran away,when,[last,mont],where,[]] [which,cats,ran away,last,month,?] [goal,ide...
  • 1 votes
     answers
     views

    Prolog:事实和规则

    我有以下情况,我必须做一个代表医生就诊的谓词,但它不起作用 . doctor(adele). doctor(inez). doctor(elin). patient(aurora). patient(mandy). patient(roan). doctor_attends_patient(doc,pat):-doctor(doc),patient(pat). 在进行查询时返回false ....
  • 0 votes
     answers
     views

    如何计算prolog中的所有出现次数

    我需要写一个prolog谓词,它将计算给定列表的所有出现次数 . 我已经搜索了stackoverflow来找到一个解决方案,我发现最接近的是一个只计算第一次出现的谓词 . 我必须编写的谓词假设是这样工作的: inde(1, [1,2,1,1,2,2,1],X) -> X=[1,3,4,7] 我正在使用的程序是这样的: inde([3,2,1,1],1,X) -> X = 3 我将把...
  • 0 votes
     answers
     views

    Prolog上的递归谓词问题

    目标 a(3, X) 应返回 6 . 基于此代码 . 我已将其转换为Prolog代码,但在递归谓词中存在问题 . 前两行用于0和1以返回相同的值 . c=1 for i = 2 to n do if c > i then c=c-1 else c=c+1 end if end for return c 但是在第4步它获得结果,然后返回到...
  • 2 votes
     answers
     views

    青蛙和蟾蜍

    我对Prolog很新,遇到了一个似乎很容易实现的逻辑谜语,但是在网上搜索了2天之后,我还是无法解决如何在Prolog中解决它的问题 . 三只青蛙和三只蟾蜍排列在下面的起始状态图中所示的配置中 . 青蛙在右边,蟾蜍在左边 . 通过一系列有效的两栖动作,你必须将状态转换为目标状态,如下图所示 . 但青蛙和蟾蜍只能按照以下规格移动: 一次只能移动一只两栖动物(即青蛙或蟾蜍) . 青蛙只能向左移动...
  • -1 votes
     answers
     views

    如何将prolog与c#或java [on hold]集成

    如何用c#或java ...整合tic tac toe prolog代码?我已经尝试在c#上集成它但是不明白将prolog与c#集成的过程如果有人有任何想法请尽快指导......!
  • 2 votes
     answers
     views

    递归谓词在到达基本案例后继续

    我正在尝试编写一个名为'range'的谓词,它创建一个指定范围内的int列表 . 例: range(4,9, L). L = [4,5,6,7,8,9] 我写的谓词似乎工作正常但是当它完成时我能够点击“下一步”然后它返回: L = [4,5,6,7,8,9,_1200 | _1202] 这是我的代码: range(Low, Low, [Low]). %base case, if low an...
  • -2 votes
     answers
     views

    在GNU prolog中,~s和~n是什么意思?

    在一行代码的上下文中: format('~w ~s animal ~n', [X, "is a"]). 我知道~w传递参数写,但我不确定其他两个做什么 .
  • 1 votes
     answers
     views

    Prolog未加权图形距离减1

    所以我试图找到未加权图的路径和长度 . 这是我的代码;你给它一个关系,一个开始,一个结束,以及长度 . 代码可以工作,但它返回的长度比所需的长1 . :- use_module(library(lists)). edge(1,2). edge(1,4). edge(1,3). edge(2,3). edge(2,5). edge(3,4). edg...
  • 0 votes
     answers
     views

    整数平方根在SWI-Prolog和YAP中有效,但在GNU-Prolog中没有

    我通过将其添加到swipl,gprolog和yap中的用户文件来测试以下代码: isqrt(N, _) :- N < 0, !, fail. isqrt(N, N) :- N < 2. isqrt(N, R) :- X is N, Y is (N // 2), isqrt(N, X, Y, R). isqrt(_, X, Y, X) :- ...
  • 1 votes
     answers
     views

    为什么这个SPARQL查询不能用于Prolog?

    我正在尝试将SPARQL查询集成到Prolog程序中(我正在使用SWI-Prolog) 为了测试它我正在做以下操作: 进入SWI-Prolog shell我执行以下命令: use_module(library(semweb/sparql_client)). 加载sparql客户端库 然后,在SWI-Prolog shell中,我执行以下SPARQL查询: ? - sparql_que...
  • 9 votes
     answers
     views

    XSB Prolog中的单元测试?

    如何使用XSB Prolog进行单元测试?有图书馆吗?或者是否有可能以某种方式在XSB中使用SWI-Prolog的 plunit 库? 如果没有可用的XSB测试库(或其他Prolog与 plunit 没有兼容),这个问题的变体可能是:你如何测试你的Prolog代码?您是否使用喜欢的模式进行测试?
  • 12 votes
     answers
     views

    SWI-Prolog中的面向对象编程

    我在某处读到你可以将模块视为Prolog中的对象 . 我试图了解这个,如果它是一个很好的编码方式 . 如果我有两个文件,一个定义一个类狗,然后另一个使用这个类来制作两个狗对象 . :- module(dog, [ create_dog/4,bark/1 ]). create_dog(Name,Age,Type,Dog):- Dog = dog(name(Name),age(Ag...
  • 1 votes
     answers
     views

    仅在SWI-Prolog中的单个单元测试范围内声明真实的事实

    作为这个问题的一个例子,我有一个非常简单的Prolog文件 main.pl ,其中我定义了一些形状的颜色 . colour(circle, red). colour(triangle, red). colour(square, blue). 现在,我定义了一个谓词 same_colour/2 ,如果 S1 和 S2 是相同的颜色,则为真 . same_colour(S1, S2) :- ...
  • 0 votes
     answers
     views

    如何在BATCH模式下运行PROLOG脚本文件? (在Linux终端中)

    我正在尝试使用带有规则的PROLOG脚本文件在批处理模式下,(非交互模式) . 在 Ubuntu Linux 中使用 swi-prolog ,它在Prolog的交互模式下运行良好 . 但是如何在批处理模式下运行prolog? (不是交互模式) . 因此,目标是使用查询参数调用 swipl并看到结果作为终端的输出 . 理想的情况下,还可以在终端输出中看到每个输入查询的规则是"true&qu...
  • 1 votes
     answers
     views

    使用Prolog规则中的事实列表

    我目前正在编写一个铁路线计划但是使用来自事实的列表有点麻烦 . 我是Prolog的新手,到目前为止已经写了以下事实和规则: location(euston, [northernLine]). location(warrenStreet, [victoriaLine, northernLine]). location(warwickAvenue, [bakerlooLine]). location(...

热门问题