我想在序言中创建一个列表,在每个递归步骤中,我都会向列表中添加一个元素。我的代码:
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.
并没有在每次递归中添加元素。这样做的正确方法是什么?
答案 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
大于5
且a
被添加到列表的情况。
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).