prolog - puntas - como hacer una estrella facil
¿Cómo puedo dibujar un triángulo de estrella usando recursivo en prólogo? (2)
Debes pasar el límite superior:
star :- star(0, 5).
star(C, X) :- C < X, count(0, C), C1 is C+1, star(C1, X).
star(C, X) :- C >= X.
count(X, Y) :- X =< Y, write(''*''), X1 is X+1, count(X1,Y).
count(X, Y) :- X > Y, nl.
Cambie de nuevo los operadores para que se ajuste a su prólogo ( is
decir, is
convierta en =
, >=
convertirse =>
, etc.). Tenga en cuenta que los cortes no son obligatorios ... Use con cuidado.
?- star.
*
**
***
****
*****
este código usando para dibujar un triángulo, ¿alguien puede explicar cómo funciona?
predicates
star(integer).
count(integer,integer).
clauses
star(1):-write(''*''),!.
star(X):-X<=0,!.
star(X):-count(1,X),Z=x-1,nl,star(Z),!.
count(X,Y):-X<=Y,write(''*''),X1=X+1,count(X1,Y),!.
count(X<Y):-X>Y,!.
este código dibuja 5 estrellas, 4,3,2,1 cómo estoy comenzando desde 1,2,3,4,5
CapelliC recibe crédito por la solución, pero la modificaré solo ligeramente para mayor claridad e intentaré agregar alguna explicación:
% Print a triangle of 1 to N stars
star(N) :- star(1, N). % (I modified this slightly to accept N parameter)
% Print rows of NStars stars up to MaxStars stars
star(NStars , MaxStars ) :-
NStars =< MaxStars , % Print this row if NStars <= MaxStars
row_of_stars(NStars), % Print NStars for this row
NStars1 is NStars+1, % Increment the star count
star(NStars1, MaxStars ). % recursively print NStar1 to MaxStars triangle
star(NStars, MaxStars) :-
NStars > MaxStars . % Done when exceed MaxStars
% Print NumStars stars
row_of_stars(NumStars) :-
row_of_stars(1, NumStars). % Print NumStars starting with star number 1
row_of_stars(N, MaxStars) :-
N =< MaxStars, % This case is if star number doesn''t exceed max
write(''*''), % Print a star
N1 is N+1, % Increment the star count
print_a_star(N1, MaxStars). % Print the next star in the row
row_of_stars(N, MaxStars) :-
N > MaxStars, nl. % Done when exceed MaxStars
Este problema se resolvió con dos predicados principales: star
y row_of_stars
(anteriormente, count
). El predicado de star
maneja el problema en el nivel de "triángulo". Es decir, se centra en las filas: cuántas filas imprimir y cuántas estrellas debe obtener cada fila cuando se imprime. El otro predicado, row_of_stars
(o anteriormente, count
), se enfoca en una sola fila de un número dado de estrellas. Simplemente imprime la cantidad de estrellas que se le dice que imprima. Dado que el problema requiere recurrencia o iteración en las filas, así como el número de estrellas en una fila, el problema se simplifica al dividir la solución en estas dos áreas.