我试图在目标上触发回溯,但如果可能的话,以一种动态的方式。为了更好地举例说明我的问题,假设我们有以下PROLOG代码:
num(1).
num(2).
num(3).
num(4).
num(5).
然后我转到SWI-Prolog并调用:num(X)。通过键入;,这将触发回溯以查找所有解决方案。
我想要的是删除这些事实(num(1),num(2)等),并用动态生成这些事实的东西替换这些代码。我有什么方法可以做到这一点吗?诸如此类的事情,也许吧?
num(X):- for X in 1..5
产生与上述代码相同的解决方案?
据我所知,findall谓词返回一个列表,这不是我要找的。我想回溯所有的
到目前为止,我一直在尝试定义自然数,我这样做了:
1 nat(0). % 0 zero is a natural, can be a stoping case
2 nat(X):- 0>X , !,fail. %if is less then zero then its not a natural.
3 nat(X):- nat(Z), X is Z+1. %if its bigger than zero do recursively for the number-1
当我这样做时,它会给我“实例化错误在(
我不知道为什么来自给定Prolog代码的以下查询会生成错误Out of local stack。
Prolog代码:
likes(g,c).
likes(c,a).
likes(c,b).
likes(b,a).
likes(b,d).
likes(X,Z) :- likes(X,Y), likes(Y,Z).
查询
?- likes(g,X).
结果:
X = c ;
X = a ;
X = b ;
ERROR: Out of local stack
编辑1这是我认为Prolog应该处理这个查询的方式,
likes(g,c) is a fact, so X={c}
likes(g,b) &
我有一个任意输入的符号序列,例如progressive,必须确定它是否包含输入的符号序列,例如progress。我的想法是把字符串分解成字母列表和比较列表。
'break'(Str,L):-'name'(Str,L1),'change'(L1,L).
'change'([],[]).
'change'([X|T],[S|T1]):-'name'(S,[X]),'change'(T,T1).
'break'(progressive,X).
X = [p, r, o,
来自教科书“Java中的数据结构和算法”的第40页,6/e(代码略有修改):
Scanner scanner = new Scanner(System.in);
System.out.print("Please enter an integer: ");
while (!scanner.hasNextInt()) {
scanner.nextLine();
System.out.print("Invalid int; pls enter an int: ");
}
int i = scanner.nextInt();
System.out.pri
我已经按照下面的说明在我的linux机器上设置并安装了interprolog和swi prolog :
我已经将unixVariables.sh编辑为包含机器上的java和swi-prolog(pl)可执行文件的路径,并且我的unixVariables.sh如下所示:
# This is a typical environment for Linux, see elsewhere for Mac OS X
JAVA_BIN=/usr/lib/jvm/java-6-sun-1.6.0.16/bin
XSB_BIN_DIRECTORY=/home/YOUR_NAME/XSB271/config
我正在开发一个用Prolog编写的应用程序。我需要过滤一个元素列表,并删除那些不满足特定约束或条件的元素,同时保持原来的列表顺序。我认为最好的方法是这样做:
filter([],Filtered).
filter([L|List],[F|Filtered]) :-
/* Conditions are met: bypass the element to the filtered list */
check_conditions(L),
filter(List,Filtered).
filter([L|List],Filtered) :-
/* Condition
这个QuickCheck发生器
notEqual :: Gen (Int, Int)
notEqual = do
(a, b) <- arbitrary
if a /= b
then return (a, b)
else notEqual
在传递给forAll时似乎没有终止。我猜递归不知何故进入了一个无限循环,但为什么呢?
我想知道一个可以包含如下内置调用的Prolog:
accum(generator, filter, accumulator)
Calculates all solutions to generator.
For each one, if filter can be proved, accumulator is proved.
Backtracks to find all solutions to filter and generator.
Accumulator may backtrack internally, but multiple proofs of accumulator are
不知何故,如果我在我的KubernetesPodOperator中指定了资源,DAG就会失败。看起来已经创建了pod,至少它试图创建它。日志上写的是Event: XXXXX-e59a4be6 had an event of type Pending。 resource_config = {'limit_memory': 1, 'limit_cpu': 1, 'request_memory': 1, 'request_cpu': 1} dagA = KubernetesPodOperator(
name=&
我正在编写一个将JavaCC转换为ANTLR4的编译器,其中一条规则涉及传递参数并从中获取返回值。
对于规则“term”,我必须执行类似以下的操作:
Term term(ReadOptions options, int priority):
{
int p = options.operatorSet.getNextLevel(priority);
Term t;
}
{
(
LOOKAHEAD({p==0})
t = simpleTerm(options)
|
LOOKAHEAD(<NAME_TOKEN>,{priority==1201 &a