我有以下递归谓词,从1-5输出星号。有人可以告诉我,我将如何反向这样做,所以像下面预期的输出是我想要实现的。谢谢。
预期输出
*****
****
***
**
*
*
**
***
****
*****
实际输出
*
**
***
****
*****
代码
asterisk :- asterisk(0, 5).
asterisk(A, B) :- A < B, count(0, A), A1 is A+1, asterisk(A1, B).
asterisk(A, B) :- A >= B.
num(X, Y) :- X =< Y, write('*'), X1 is X+1, num(X1,Y).
num(X, Y) :- X > Y, nl.1
答案 0 :(得分:0)
这里的解决方案。我创建了两个谓词,一个用于打印鞋面,另一个用于打印下半部分。
printAsterisk(0):-
nl.
printAsterisk(I):-
I \= 0,
write("*"),
I1 is I-1,
printAsterisk(I1).
printLower(N,N).
printLower(N,I):-
I \= N,
printAsterisk(I),
I1 is I+1,
printLower(N,I1).
printUpper(_,0).
printUpper(N,I):-
I \= 0,
printAsterisk(I),
I1 is I-1,
printUpper(N,I1).
asterisk(N):-
N1 is N+1,
printUpper(N,N),
printLower(N1,1).
查询:?-asterisk(5).
*****
****
***
**
*
*
**
***
****
*****
答案 1 :(得分:0)
请改为尝试:
?- asterisk(5).
build(0) :- nl.
build(N) :-
N>0,
write("*"),
N2 is N-1,
build(N2).
asterisk(0).
asterisk(N) :-
N>0,
build(N),
N2 is N-1,
asterisk(N2),
build(N).
我明白了:
***** **** *** ** * * ** *** **** *****