una puntas papel lapiz hacer foami facil estrellas estrella elaborar dibujos dibujar con compas como cinco cartulina prolog

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.