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
它要么打印'*'
or '.'
。另外,我必须倒数地写它,否则树就会颠倒/从左到右。