如何在prolog中使用递归绘制直角三角形?

Elb*_* Jn 5 recursion prolog

我得到这个直角三角形的答案,如下所示:

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)

DuD*_*uDa 2

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