Showing posts with label Prolog. Show all posts
Showing posts with label Prolog. Show all posts

Tuesday, February 14, 2017

LED es mi nuevo Hello World - Tiempo de Prolog

Como lo prometí...aquí está mi aplicación de Números LED escrita en Prolog...me tomó bastante tiempo...bastante investigación...muchos dolores de cabeza...así que espero que les guste...aun soy un completo novato en Prolog...así que...no hay ningún tipo de garantía -;)

LEDNumbers.pl

number(0,[[' _  '],['| | '],['|_| ']]).
number(1,[['  '],['| '],['| ']]).
number(2,[[' _  '],[' _| '],['|_  ']]).
number(3,[['_  '],['_| '],['_| ']]).
number(4,[['    '],['|_| '],['  | ']]).
number(5,[[' _  '],['|_  '],[' _| ']]).
number(6,[[' _  '],['|_  '],['|_| ']]).
number(7,[['_   '],[' |  '],[' |  ']]).
number(8,[[' _  '],['|_| '],['|_| ']]).
number(9,[[' _  '],['|_| '],[' _| ']]).

digits(0,[]).
digits(X,[H|T]) :- (X/10 > 0 -> H1 is floor(X/10), H is X mod 10, digits(H1,T)), !.

accRev([],A,A).
accRev([H|T],A,R) :- accRev(T,[H|A],R). 

getDigits(L,R) :- digits(L,Y), accRev(Y, [], R).

show_records([]).
show_records([A|B]) :-
  print_records(A), nl,
  show_records(B).  

print_records([]).
print_records([A|B]) :-
  format('~w',A), 
  print_records(B).

merge([L], L).
merge([H1,H2|T], R) :- maplist(append, H1, H2, H),
    merge([H|T], R), !.

listnum([],[]).
listnum([H1|T1],[R|Y]) :- number(H1,R), listnum(T1,Y).

led(X) :- getDigits(X,Y), listnum(Y,Z), merge(Z,R), show_records(R).

Quieren verlo en acción? Yo también -;)


A seguir aprendiendo -;)

Saludos,

Blag.
Development Culture.

Mi primer post en Prolog

Como siempre...estaba buscando el próximo lenguaje de programación que quieo aprender...y de alguna manera...Prolog se metió en el camino...

Ya había jugado con Programación Lógica en el pasado cuando aprendí Mercury...pero realmente...cuando se trata de lógica...Prolog se gana el premio...

Ustedes sabían que el primer compilador de Erlang se construyó en Prolog? Yo tampoco -:P

Para aprender...Estoy utilizándo SWI-Prolog que parece ser el mejor y más usado...y debo admitirlo...me encanta -;)


Así que...a simple vista...Prolog me recuerda a Mercury obviamente...pero también un poco a Forth...y extrañamente a Haskell en el sentido de que la recursividad es un elemente muy importante...

Como sucede generalmente cuando aprendo un nuevo lenguaje de programación...Empecé con mi aplicación de lista de números Fibonacci...así que aquí está...

fibonacci.pl
fibo(NUM,A,B,[H|T]) :- (NUM > 1 -> H is A + B, X is NUM - 1, 
                        (A =:= 0 -> fibo(X,H,B,T); fibo(X,H,A,T))).
fibo(_,_,_,[]).

fibonacci(NUM,R) :- fibo(NUM,0,1,X), !, append([0,1], X, R).

extensión .pl? Sip...la misma que Perl...pero como pueden ver...no tiene nada que ver como Perl -;)

En fín...aquí está el resultado...


Mi aplicación de Números LED está felizmente terminada y van a poder verla justo después de este blog -;)

Saludos,

Blag.
Development Culture.