2009-11-16 5 views
1

Salut est-il quelqu'un sait comment puis-je faire le pascal nième rangée quand je demande :? pascal (2, Row). je reçois Row = [1,2,1] ??prolog pascal triangle

s'il vous plaît aidez-moi

+0

Non ce dont j'ai besoin pour déterminer le triangle entier non seulement une rangée – thisnotmyname

+0

La deuxième rangée est [1,1], pas [1,2,1], c'est la 3ème. –

Répondre

1

Voici le code pour calculer la nième ligne.

La première partie analyse une ligne pour calculer la ligne suivante. La première ligne doit être précédée d'un 0, de sorte que le premier "1" de la ligne suivante soit une somme, comme les autres éléments. Il récursif sur les 2 listes:

pascal_next_row([X],[X]). 
pascal_next_row([H,H2|T],[A|B]):- 
    pascal_next_row([H2|T],B), 
    A is H + H2. 

La deuxième partie calcule toutes les lignes jusqu'à ce que celui qui a été demandé. Il récursif sur N:

pascal(0, [1]) :- !. 
pascal(N, R) :- 
    N1 is N-1, 
    pascal(N1, R1), 
    pascal_next_row([0|R1], R). 

Si vous avez besoin du triangle plein, tout ce que vous devez faire est de changer le deuxième paramètre pour gérer une liste de lignes, et les recueillir:

pascal(0, [[1]]) :- !. 
pascal(N, [R, R1 | RN]) :- 
    N1 is N-1, 
    pascal(N1, [R1 | RN]), 
    pascal_next_row([0|R1], R). 
1

This answer to a code golf a la la mise en œuvre en Prolog, juste élargir les noms:

+0

Lien drôle, merci. J'ai copié ma mise en place au code golf, n'hésitez pas à rouvrir le concours :-) – Jerome

0

le Triangle Pascal est également connu comme le Triangle Tartaglia:

sumC([X,Y],[Z]) :- Z is X + Y. 
sumC([X,Y|L], Z):- H is X + Y, 
        sumC([Y|L],L2), 
        Z = [H|L2]. 

tartaglia(1,[1]) :- ! . 
tartaglia(2,[1,1]) :- !. 
tartaglia(N, L) :- Ant is N - 1, 
        tartaglia(Ant,L2), 
        sumC(L2,R), 
        append([1|R],[1],L), !. 

Utilisation du prédicat aide SUMC, vous pouvez l'obtenir facilement:

?- tartaglia(3,R). 
R = [1, 2, 1]. 

?- tartaglia(2,R). 
R = [1, 1]. 

?- tartaglia(1,R). 
R = [1]. 

?- tartaglia(6,R). 
R = [1, 5, 10, 10, 5, 1]. 

Comme dit dans mon commentaire. Vous demandez la nième rangée. [1,2,1] de votre exemple est la 3ème rangée.