小编fal*_*lse的帖子

如何使用SWISH过滤Prolog

我需要创建一个名为fAtomPairs的谓词,以便给定一个原子(第一个参数)和一对对列表(每个对依次是两个原子的列表),通过仅选择那些对,将第三个参数与已过滤的对的列表统一起来具有作为第一个组成部分的原子是第一个参数.

例如 :

fAtomPairs(sA,[[basA,absAb],[ab,bbsA],[sA,abbsB],[bsA,sAsB],[sA,bb]],X)  
Run Code Online (Sandbox Code Playgroud)

必须导致

X = [[sA,abbsB],[sA,bb]]
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?我目前正在SWISH工作

filtering list prolog

0
推荐指数
1
解决办法
112
查看次数

为什么在定义转换两个原子关系的谓词时会出现堆栈限制超出错误?

我想知道为什么在这些情况下程序会无限递归:

?- love(kay, amanda).
Run Code Online (Sandbox Code Playgroud)

?- love(rob, amanda).
Run Code Online (Sandbox Code Playgroud)

这是代码:

love(amanda, kay).
love(kay, geo).
love(geo, rob).

love(X, Y) :-
   love(X, Z),
   love(Z, Y).
love(X, Y) :-
   love(Y, X).
Run Code Online (Sandbox Code Playgroud)

prolog transitive-closure non-termination failure-slice

0
推荐指数
1
解决办法
417
查看次数

努力将 Prolog 的 maplist/2 用作函数映射函数

我正在使用 SWI-prolog,我正在尝试创建一个辅助函数,该函数将映射到一个列表并将每个元素与给定的整数相乘。我的目的是创建一个对应于 Haskell 函数的谓词multByN x n = x * n并在这个意义上使用它:

map (multByN 3) [1,2,3] 这会将所有元素乘以 3 并产生 [3,6,9]

我在 Prolog 中搜索了相应的谓词,maplist/2但发现我只能使用它来检查列表中每个元素的布尔条件是否成立,而不是实际返回一个新的、处理过的列表。我了解这是如何工作的:

isEven(X) :- 0 is X mod 2

maplist(isEven, [2,4,6])true.

但是,我不明白人们会如何将maplist(multByN(3), [1,2,3])某些变量与[3,6,9]. 由于我无法弄清楚这一点,因此我尝试实现我自己的映射函数,将谓词映射multByN到列表,我得到了一些看起来正确的东西,但事实并非如此。我有这个:

multByN(X, N, Y) :- Y is N*X.

mapFunc(_, [], L) :-
    write(L), nl.

mapFunc(N, [H|T], L) :-
    multByN(H, N, Z),
    mapFunc(N, T, [Z|L]).
Run Code Online (Sandbox Code Playgroud)

使用这个谓词我得到:

?- mapFunc(3, [1,2,3], X).
[9,6,3|_1746]
true ;
Run Code Online (Sandbox Code Playgroud)

在这里,我实际上是在打印最终列表以查看它的样子,但是我们可以看到查询实际上并没有说,X = …

mapping prolog meta-predicate

0
推荐指数
1
解决办法
710
查看次数

如何判断一个数是否是2的幂

我想创建一个函数,它接受一个数字并检查这个数字是否是 2 的幂。比如:fn(0) 是否,fn(1) 是是,fn(2) 是是,fn(3) 是否
等等...我试图创建一个像 power(N,K,R) 这样的幂函数,但是如果我问像 power(2,_,8) 这样的东西,这不起作用。任何帮助将不胜感激。

prolog

0
推荐指数
1
解决办法
105
查看次数

Prolog 在读写命令中给出随机数而不是字符串

say_hi:-
    write('Your name? '),
    read(X),
    write('hi'),
    write(X).
Run Code Online (Sandbox Code Playgroud)

这是我的代码但是!!!当我运行它时就会发生这种情况。为什么?

?- say_hi.
Your name? Ali.
hi_884
true.
Run Code Online (Sandbox Code Playgroud)

这不是给予

> hi Ali

Run Code Online (Sandbox Code Playgroud)

。为什么?

请指导我并给我简单的代码来读取和写入名称。每次输入不同的名称都会给出不同的数字。

prolog

0
推荐指数
1
解决办法
181
查看次数

完全数 1 到 n

编写一个算法,打印从 1 到 n 的完美数。要确定一个数字是否完美,请将所有小于该数字的因数相加。如果总和等于数字,则是完美的。

import java.util.Scanner;

public class Assign_6 {

    public static void main(String[] args){

        int num,number,sum=0,factor;

        System.out.print("Enter Number");
        Scanner keyboard = new Scanner (System.in);

        number=keyboard.nextInt();

        for (num=1;num<number;num++){
            for(factor=1;factor<number;factor++){
                if(num%factor==0){
                    sum= sum+factor;
                }
                if(sum==num){
                    System.out.println(sum);
                }
                sum=0;
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:24

什么都打印不出来。不知道怎么回事。我哪里错了?我只能使用 while、for 和 else-if 语句。

java for-loop if-statement perfect-numbers

-1
推荐指数
1
解决办法
9768
查看次数

修改SWI-Prolg顶层

是否可以对SWI Prolog的顶层进行修改?

prolog swi-prolog prolog-toplevel

-1
推荐指数
1
解决办法
107
查看次数

Prolog:填充n个元素的列表

需要做一个谓词,填充(L,X,N),其中L是一个包含N个元素X的列表.如果N <= 0或N!= L的长度,L应该是一个空列表.

这就是我所做的,我从来没有能够在Prolog中正确地使用if,else ..结构:

fill(L,X,N) :-
   ((N =< 0) -> 
   L = [];
   length(L,I),
   ((N =\+= I) -> 
   L = [];
   fill2(L,X,N))).
fill2([H|T],X,N2) :-
   NewN = N2 - 1,
   H = X,
   fill2(T,X,NewN).
Run Code Online (Sandbox Code Playgroud)

我也有一个更简单的版本,除非N!= L的长度时才有效

fill(L,_,N) :-
   N =< 0,
   L = [].
fill([H|T],X,N) :-
   NewN = N - 1,
   H = X,
   fill(T,X,NewN).
Run Code Online (Sandbox Code Playgroud)

因此,例如,fill(L,20,4)返回L = [20,20,20,20],但fill([20,20,20],X,2)不返回L = [].

prolog

-1
推荐指数
1
解决办法
4825
查看次数

在Prolog中创建列表列表

我想要一个带有约束的列表列表,这是我用SWI-Prolog编写的代码:

List = [L1,L2,L3],
L1 = [X1, X2], L1 ins 1..4,
L2 = [Y1, Y2], L2 ins 1..4,
L3 = [Z1, Z2], L3 ins 1..4.
Run Code Online (Sandbox Code Playgroud)

但是,它给了ERROR:Type Error: integer expected.

list prolog clpfd

-1
推荐指数
1
解决办法
307
查看次数

查找逻辑公式的一致分配

我即将在Prolog中实现逻辑术语的证明者.我当前的代码并不是真的可以呈现,因此,我只是说,我想要我的程序做什么,希望你可以给我一些很好的建议:)

它应该采用变量列表(也就是说逻辑参数),其次是包含这些参数的逻辑公式(例如'not'(A 'and' B) 'or' 'not'(B 'and' C) 'or' ...,依此类推).

作为输出,我希望我的程序能够以可能的一致性分配进行响应.单个参数可以是true(1)或false(0).

所以我的目标是回归A=0, B=0, C=0 ; A=1等等.

我很高兴有关我的计划的每一个帮助:)

boolean-logic prolog clpb

-2
推荐指数
1
解决办法
140
查看次数

Prolog未定义的过程和操作员优先级冲突错误?

刚刚开始学习Prolog,我不知道为什么我会收到这个错误.我无法理解我能做些什么.

这是'代码':

?- assert(likes(a , beaf)).

?- assert(likes(b , nuduls)).
?- assert(likes(b , hotdog)).

?- assert(likes(c , sandwicth)).
?- assert(likes(c , bargar).

?- assert(likes(d , juice)).
?- assert(likes(d , chicken_curry)).
?- assert(likes(d , nudules)).

?- assert(likes(e , brade)).
?- assert(likes(e , butter)).
?- assert(likes(e , bargar)).

?- friend(e,d).
?- friend(d,a).
?- friend(d,b).
?- friend(d ,c).




?- highlyrecommended(X,L):-friend(X,Y),likes(Y,L).
?- recommended(X,L):-friend(X,Z),friend(Z,Y),likes(Y,L).



?- Is d is the friend of e ?
?- Y
?- Is e is the friend of c ?
?- …
Run Code Online (Sandbox Code Playgroud)

prolog

-3
推荐指数
1
解决办法
2801
查看次数