我得到这个直角三角形的答案,如下所示:
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.
*
**
***
****
*****
******
我应该修改什么来打印这种类型的直角三角形?
*
**
***
****
*****
******
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.
我在打印空间时遇到麻烦。SWI序言中似乎存在一个错误:它不打印任何内容或' '
。因此,也许这段代码与您的prolog解释器一起运行,write(' ')
而不是write('.')
。
该代码与您的代码非常相似。主要区别在于计数有3个参数:迭代器A
,字符边界号B
和写入的字符总数(N
)。迭代器A
必须小于或等于N
。根据条件A >= B
打印'*'
或打印'.'
。另外我还必须将其写成倒数,否则树会倒挂/从左到右。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句