递归地在序言中创建列表

时间:2019-08-19 16:23:19

标签: prolog

我想在序言中创建一个列表,在每个递归步骤中,我都会向列表中添加一个元素。我的代码:

let title = document.querySelector('.title');
let preview = document.querySelector('.preview');
preview.addEventListener('mouseover', function(){
   title.setAttribute("style", "opacity:0;")
})

这应该运行递归,根据N来向列表中添加a或b。但是,solve(N,List):- N>5, solve(N-1,[a|List]), N<5, solve(N-1,[b|List]), N is 0. 并没有在每次递归中添加元素。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

基本上,您需要编写三个子句。首先,是N = 0的子句。

solve(0, []).

N小于(或等于)5时,您想将b添加到列表中。您还需要检查N是否为负,否则您的程序将在无穷远处递归。您还需要使用N - 1谓词来计算is

solve(N, [b | L]) :-
    N >= 0,
    N =< 5,
    M is N - 1,
    solve(M, L).

第三个子句用于N大于5a被添加到列表的情况。

solve(N, [a | L]) :-
    N > 5,
    M is N - 1,
    solve(M, L).

分别查询solve(2, L)solve(7, L)会产生以下结果:

L = [b, b]                 % N = 2
L = [a, a, b, b, b, b, b]  % N = 7

答案 1 :(得分:-1)

我认为您正在尝试这样做:

   solve(0, []).

   solve(N, [a|List]):-
       N > 5,
       solve(N-1,List).

   solve(N, [b|List]):-
       N =< 5,
       solve(N-1,List).