En el artículo pasado puse mi programa en prolog, el cual sacaba la solución al problema propuesto, que tomar los 100 primeros enteros y descomponerlos como la suma de dos enteros al cuadrado (también del 0 al 100). El programa que puse era defectuoso, pero fue a "ojo de buen cubero" (que no resulté tan buen cubero). Ya con calma me senté a resolver el asunto y éste es el código que sí funciona:
predicates
num(integer)
cuenta(integer,integer,integer).
checa(integer)
clauses
num(0).
num(1).
num(2).
num(3).
num(4).
num(5).
num(6).
num(7).
num(8).
num(9).
num(10).
num(11).
num(12).
num(13).
num(14).
num(15).
num(16).
num(17).
num(18).
num(19).
num(20).
num(21).
num(22).
num(23).
num(24).
num(25).
num(26).
num(27).
num(28).
num(29).
num(30).
num(31).
num(32).
num(33).
num(34).
num(35).
num(36).
num(37).
num(38).
num(39).
num(40).
num(41).
num(42).
num(43).
num(44).
num(45).
num(46).
num(47).
num(48).
num(49).
num(50).
num(51).
num(52).
num(53).
num(54).
num(55).
num(56).
num(57).
num(58).
num(59).
num(60).
num(61).
num(62).
num(63).
num(64).
num(65).
num(66).
num(67).
num(68).
num(69).
num(70).
num(71).
num(72).
num(73).
num(74).
num(75).
num(76).
num(77).
num(78).
num(79).
num(80).
num(81).
num(82).
num(83).
num(84).
num(85).
num(86).
num(87).
num(88).
num(89).
num(90).
num(91).
num(92).
num(93).
num(94).
num(95).
num(96).
num(97).
num(98).
num(99).
num(100).
checa(101) :- !,fail.
checa(_).
cuenta(X,A,B) :-
num(A),
num(B),
X = (A*A) + (B*B),
write(X," = ", A,"^2 + ",B,"^2"), nl,
X1 = X + 1, !,
checa(X1),
cuenta(X1,A1,B1).
cuenta(X,A,B) :- X1 = X + 1,
checa(X1),
cuenta(X1,A,B).
La solución completa la dio en Mathematica Emmanuel Garcés, la cual realmente es elegante, mucho mejor que mi código en prolog. se ve que mi tocayo conoce bastante bine el programa de Wolfram
Tidak ada komentar:
Posting Komentar