相关疑难解决方法(0)

AUBUC的Prolog联盟

我最近开始学习Prolog,我无法解决如何组合三个列表的问题.

我能够组合2个列表:

%element
element(X,[X|_]).
element(X,[_|Y]):-
               element(X,Y).

%union

union([],M,M).
union([X|Y],L,S) :- element(X,L),union(Y,L,S).
union([X|Y],L,[X|S]) :- (not(element(X,L))),union(Y,L,S).
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

list prolog

20
推荐指数
2
解决办法
2605
查看次数

在首次解决Fibonacci对之后防止回溯

术语fib(N,F)当是真的FN个Fibonacci数.

以下Prolog代码通常适用于我:

:-use_module(library(clpfd)).
fib(0,0).
fib(1,1).
fib(N,F) :- 
  N #> 1, 
  N #=< F + 1, 
  F #>= N - 1,
  F #> 0, 
  N1 #= N - 1, 
  N2 #= N - 2, 
  F1 #=< F, 
  F2 #=< F,
  F #= F1 + F2, 
  fib(N1,F1),
  fib(N2,F2).
Run Code Online (Sandbox Code Playgroud)

执行此查询时(在SICStus Prolog中),找到第一个(并且正确)匹配N(而非立即):

| ?- fib(X,377).
X = 14 ?
Run Code Online (Sandbox Code Playgroud)

当进行(通过输入";")以查看是否还有其他匹配(根据定义是不可能的)时,需要花费大量时间(与第一次匹配相比),只是总是回答否:

| ?- fib(X,377).
X = 14 ? ;
no
Run Code Online (Sandbox Code Playgroud)

作为Prolog的新手,我尝试以!各种方式使用Cut-Operator(),但是在第一场比赛后我找不到阻止搜索的方法.根据上述规则,它是否可能?如果是的话,请告诉我如何:)

prolog fibonacci backtracking clpfd failure-slice

6
推荐指数
2
解决办法
1014
查看次数

标签 统计

prolog ×2

backtracking ×1

clpfd ×1

failure-slice ×1

fibonacci ×1

list ×1