我试图递归地做加法,在swi中将两个数字相乘。我目前正在学习Prolog,我不想使用任何像clpfd这样的库。
mult(A, B, C) :- A < B, mult(B, A, C). % always make the first number bigger
mult(A, B, C) :- B > 0, B1 is B - 1, mult(A, B1, A + C). % keep adding
mult(A, B, C) :- B == 0, C is 0. % base case
“c”应该是结果。
这将尝试在Java中复制以下算法:
int product(int x
我想在prolog中创建KMP,并像这样开始工作。很遗憾,我无法创建Prolog所需的前缀表?考虑到prolog是一种逻辑语言,我做得对吗? compare(CharAtStartPos,CharAtNextPos,StartPos,NextPos,PrefixList,S,N,P):-
CharAtStartPos=CharAtNextPos,write('Equal'),
N is NextPos+1,
string_chars(N,Element),
write("Element is"), write(Element),
我试图在prolog中做一个简单的聊天机器人,这基本上就是这个python脚本所做的.有人能帮我吗?
question = input('Hello, can i help you?')
questions = ["what is ipv4", "what is router", "what is osi"]
answers = [
"Internet Protocol version 4 is the fourth version of the Internet Protocol.",
我正在试用Prolog,并尝试创建自己的"if-then-else“方法,这样我就不会为了实验而使用-> ;方法。我的目标是,如果需要的话,我的代码中可以有嵌套的ifs和else。到目前为止,我已经了解到:
ifthenelse(_, G, G):- G. %no matter the condition, the goals are the same
ifthenelse(true,G,_):- G. %if
ifthenelse(false,_,G):- G. %else
我认为我的方式似乎不太正确。如何正确地制作我自己的ifthenelse/3?
谢谢
我想用prolog翻译我的自然代码。
这是我的自然密码:
if E < W then
if C < Max then
print('increment C')
else
print('C unchanging')
if E > W then
if C > Min then
print('decrement C')
else
print('error')
以下是我在中的代码:
tddv_worst(_).
tddv_best(_).
td
--下面给出的if else表示是否正确?
--我希望if-else语句解释为:
如果等级为NC,课程为CDC,则调用isNCinCDC或
如果成绩为NC,课程为研习班,则调用isNCinCDC或
如果成绩为NC,课程为论文,则调用isNCinCDC或
如果成绩为NC,课程为选修课,则调用isNCinELEC或
如果成绩为NC,课程为实践学校,则调用isNinPS或
如果等级为NC,课程为项目课程,则调用isNinPC
isNCCalc([],[],[]) :-
display('There are no more courses to check for NC').
isN
我为条件句创建了一个子句,但当我使用跟踪命令对程序进行深度分析时,会出现失败消息:
我想要检查一个子列表是否在我的列表中,如果是,我将增加我的计数器,以使在之后发生的减少周期,否则,我将在我的列表中添加子列表。
我的代码:
if(condition,then,else) :- condition, !, then.
if(_,_,else) :- else.
createBombs(B,Q) :-
Li = [],
C is Q,
repeat,
random(1,10,X),
random(1,10,Y),
print(C),
if
我正在尝试编写一个二元谓词来获取一个列表,为每个元素计算mod 5,然后将其放入另一个列表中。到目前为止,我已经这样做了,
mod5(X,L):- R = [], modhelper(R,L), write(R).
modhelper(X,L):- memb(E,L), mod2(E,Z), addtolist(Z,X,X), modhelper(X,L).
%Get an element from the list L.
memb(E,[E|_]).
memb(E,[_|V]):- memb(E,V).
%If element is integer, return tha
我试着写一个能理解用C#写的学生程序的prolog代码。现在,我被困在识别学生程序中的'if‘语句的过程中。例如:下面是我期望从学生那里得到的代码。
int d = int.Parse(Console.ReadLine()); // value d is inputted by user
int s = 0;
if (d>0)
s = 2;
else if (d==0)
s = 1;
else
s = 0;
我将这段预期代码的目标定义为:
goal:-
hasVarName(Vid_s, s),
hasVarName(Vid_d, d),
在Prolog中,我想以如下方式使用if-else语句:
lecture(spanish,monday,at8).
lecture(french,monday,at8).
lecture(english,monday,at10).
lecture(german,tuesday,at8).
generatePossibleSchedulesWithTwoLectures(LectureA,LectureB):-
lecture(LectureA,A,X),
lecture(LectureB,B,Y),
%If A of LectureA is equal to B
我是Prolog的新手,我正在尝试编写一个带有"or“条件的if/else语句。因此,为了演示,我需要类似这样的东西:
gothrough([H|T], B, C):-
( T == [] or H == 'then' %if either the tail is an empty list or if H == "then", do the following%
-> append(H,B,B), outputs(B,C)
; append(H,B,B), gothrough(T, B, C) %else%
我最近开始学习Prolog,遇到了一个奇怪的问题。在这里,您可以看到一个代码示例(我使用SWI-Prolog7.2.3),它给出了关系树和我的两个任务的解决方案。
/* File: ancestors.pl
Author: Dave Robertson
Purpose: Relationships in a family tree
Suppose we have a family tree like this :
alan andrea bruce betty eddie elsie fred freda
| | | |
我必须在列表中找到给定元素的所有索引,并将其作为列表返回。举个例子:
?- indexList(a,[a,b,c,a,b],Rs).
Rs = [0,3]
我的想法是:
positions( E, L, P ) :- positions( E, L, 0, Rs ).
positions( E, [], _, [] ).
positions( E, [E|Xs], P, [P|PT] ) :- P1 is P + 1, positions( E, Xs, P1, PT ).
positions( E, [X|Xs], P, PT ) :- P1 is P+1, positions( E, X
来表示函数
f(x) =
if x < -2 then -1
else
if x > 2 then +1
else
0
决策树表示为
[-1, [lt, -2], [1, [gt, 2], 0] ]
类似地,为了表示函数
f(x) =
if x < 0 then
if x < -3 then -1
else 0
else
if x < 3 then +1
else +2
我们使用树:
[-1,[lt,-3],0],[lt,