我得到这个直角三角形的答案,如下所示:
shape:- shape(0, 6).
shape(S, A) :- S < A,
count(0, S),
S1 is S+1,
shape(S1, A).
shape(S, X) :- S >= X.
count(A, B) :- A =< B,
write('*'),
A1 is A+1,
count(A1,B).
count(A, B) :- A > B, nl.
*
**
***
****
*****
******
Run Code Online (Sandbox Code Playgroud)
我应该修改什么来打印这种类型的直角三角形?
*
**
***
****
*****
******
Run Code Online (Sandbox Code Playgroud)
shape(S, _) :- S =< 0.
shape(S, N) :- S > 0,
S1 is S-1,
count(0, S1, N),
shape(S1, N).
count(A, _, N) :- A >= N, nl.
count(A, B, N) :- A < N,
( A >= B
-> write('*')
; write('.')
),
A1 is A+1,
count(A1,B, N).
?- shape(6, 6).
.....*
....**
...***
..****
.*****
******
true ;
false.
Run Code Online (Sandbox Code Playgroud)
我在打印空间时遇到问题。SWI prolog 似乎有一个错误:它要么不打印任何内容,要么不打印' '. 因此,这段代码可能与您的 prolog 解释器一起运行,write(' ')而不是write('.').
该代码与您的非常相似。主要区别在于计数有 3 个参数:迭代器A、字符边界数B和写入的字符总数 ( N)。迭代器A必须小于或等于N。根据情况,A >= B它会打印'*'或'.'。另外,我必须倒数地写它,否则树就会颠倒/从左到右。