prolog

    1热度

    2回答

    我从prolog开始,作为一个练习,我试图颠倒一个列表。 例如,inv([1,2,3], S)应该给S = [3,2,1]. 下面是一个什么样的合作伙伴,我已经这样做: conc([], L, L). conc([X|L1], L2, [X|L3]) :- conc(L1, L2, L3). tail([X|Y], S) :- conc([], Y, S). inv([X|Y], S)

    2热度

    3回答

    首先我完全新的PROLOG和我试图写的谓词长度(M,X,N),这是真实的,如果M不同于ñ比X. 更我写了下面测试用例如果M(= Dec.5号)和N(= Dec.2号)不同比X(= Dec.2号)更是如此。正是在这种情况下,正确的,因为5和2的3差别是超过2: ?- length(s(s(s(s(s(0))))), s(s(0)), s(s(0))). true . 我知道序言工作递归

    0热度

    1回答

    我想知道是否可以强制执行结果,例如 test(0, 0, 0). 在Prolog中是错误的。

    0热度

    2回答

    我怎样才能更简洁地表达以下连词? condition(X1, X2, X3, X4, X5) :- X1 \= X2, X1 \= X3, X1 \= X4, X1 \= X5, X2 \= X3, X2 \= X4, X2 \= X5, X3 \= X4, X3 \= X5, X4 \= X5.

    1热度

    1回答

    我想读取一个文件,然后根据第一个结果编写另一个文件,但是一旦我读取第一个文件,程序立即终止。我寻找了为什么会发生,但我没有找到任何东西。我想知道有人能帮助我。 这是代码: main :- current_prolog_flag(argv, Argv), [H|_T] = Argv, readPlainText(H), getList(L), ope

    3热度

    1回答

    我在学习Prolog的基础知识,并使用以下代码继续运行到exists_error。 comes_after(m1, m2). comes_after(m2, m3). comes_after(m3, m4). comes_after(m4, m5). comes_after(m5, m6). does_come_after(X, Y) :- comes_after(X, Y). do

    4热度

    2回答

    我正在使用更高阶的Prolog变体,缺少findall。 关于在这里实施我们自己的findall还有另一个问题:Getting list of solutions in Prolog。 低效的实现是: parent(pam, bob). %pam is a parent of bob parent(george, bob). %george is a parent of bob list_p

    1热度

    1回答

    我试图在GNU Prolog中使用->运算符,但是我在变量作用域中遇到了一些麻烦。这里有一个例子: example(A) :- B = A, (B == 2 -> write(B), write(' is 2'), nl); (write(B), write(' is not 2'), nl). 在序言控制台: | ?- example(2). 2 is 2

    1热度

    1回答

    我试着理解序言。我想给输入:转换(S(S(S(X))),Y)和输出应该是Y = 3 convert(s(0), 1). convert(s(s(0)), 2). convert(s(X),Y) :- convert(X,Y is (Y+1)). 这些都是我的规则的权利,但只有输入: convert(s(0),1)。并且 convert(s(s(0)),2)。工作。转换(s(s(0)),2)

    2热度

    2回答

    我有这样的列表中的一个列表:[[A,B],[B,C],[C,D],我想有[A,B,C ]。 我的代码是: unMakeTuple([],_). unMakeTuple([[A,_]|T],Ret):- insertOnList(A,Ret,Ret1), nl,write(Ret), nl,write(Ret1), unMakeTuple(T,Ret