Páginas

Bienvenidos

Este blog busca darle algunas herramientas para trabajar con varios de los programas más interesantes y útiles de la actualidad.

El objetivo es emplear ejemplos y su desarrollo paso a paso para que el aprendizaje sea lo más fácil y real posible.

Mathematica

Mathematica
Mathematica

Etiquetas

Datos personales

Mi foto
Ingeniero
Esp. Informática y Computación
Esp. Administración de Sistemas

apache Flex

Programas

Mathematica

Todo el poder de Mathematica en la Web:



Ejemplos de uso:

1) Plot3D[Sin[x]*Cos[y],{x,0,2 Pi},{y,0,Pi}]
2) Colombia

Escribe el ejemplo y da 'enter' o clic en el igual

Seguidores

Mostrando entradas con la etiqueta prolog. Mostrar todas las entradas
Mostrando entradas con la etiqueta prolog. Mostrar todas las entradas
martes, 25 de junio de 2013

PostHeaderIcon PROLOG: Busca numero mayor en lista (versión 2)


Este programa busca el elemento mayor de una lista:


my_list_max(X, [X]) :- 
          !.

my_list_max(X, [X|Ys]) :- 
          my_list_max(X1, Ys), 
          X >= X1, 
          !.

my_list_max(X, [_|Xs]) :- 
          my_list_max(X, Xs).


Para ejecutar el programa:


?- my_list_max(X, [5,3,9,2,8,7]).


Y el resultado es:


X = 9


Nota: Este programa fue una contribución de uno de nuestros visitantes, quien propuso una solución recursiva al problema.



*** Programa probado en WinProlog versión 4.7 ***
 

PostHeaderIcon PROLOG: Busca numero menor en lista (versión 2)


Este programa busca el elemento menor de una lista:


my_list_min(X, [X]) :- 
          !.

my_list_min(X, [X|Ys]) :- 
          my_list_min(X1, Ys), 
          X =< X1, 
          !.

my_list_min(X, [_|Xs]) :- 
          my_list_min(X, Xs).


Para ejecutar el programa:


?- my_list_min(X, [5,3,9,2,8,7]).


Y el resultado es:


X = 2


Nota: Este programa fue una contribución de uno de nuestros visitantes, quien propuso una solución recursiva al problema.



*** Programa probado en WinProlog versión 4.7 ***
 
miércoles, 24 de abril de 2013

PostHeaderIcon PROLOG: Borra ultimo elemento de una lista


Este programa borra el último elemento de una lista:


my_remove_last_element([_], []).

my_remove_last_element([Y|Ys], [Y|Zs]):-
          my_remove_last_element(Ys, Zs).


Para ejecutar el programa:


?- my_remove_last_element([a,b,c,b,e,b,f,g], Zs).


Y el resultado es:


Zs = [a,b,c,b,e,b,f]




*** Programa probado en WinProlog versión 4.7 ***
 
jueves, 1 de noviembre de 2012

PostHeaderIcon PROLOG: Permutacion de una lista


Este programa encuentra todas las permutaciones de los elementos de una lista (La permutación de un conjunto se define como cada una de las posibles ordenaciones de todos los elementos de dicho conjunto):


my_permutation(Bs, [A|As]):-
          my_append(Xs, [A|Ys], Bs), 
          my_append(Xs, Ys, Zs),
          my_permutation(Zs, As).

my_permutation([], []).


Para ejecutar el programa:


?- my_permutation([a,b,c],Ls).


Y el resultado es:


Ls = [a,b,c]
Ls = [a,c,b]
Ls = [b,a,c]
Ls = [b,c,a]
Ls = [c,a,b]
Ls = [c,b,a]


Nota: Este programa usa algunas reglas (programas) definidas anteriormente.


*** Programa probado en WinProlog versión 4.7 ***
 
lunes, 10 de septiembre de 2012

PostHeaderIcon PROLOG: Convierte lista anidada en lista no anidada


Este programa convierte una lista que contiene elementos que son listas, en una lista de elementos simples:


my_flatten(X, [X]):-
\+ list(X).

my_flatten([], []).

my_flatten([As|Bs], Cs):-
my_flatten(As, ALs),
my_flatten(Bs, BLs),
my_append(ALs, BLs, Cs).


Para ejecutar el programa:


?- my_flatten([1,7,3,4,[5,[[[6],[8]],9,7]],[[8],9],[[[0]]]], Ls).


Y el resultado es:


Ls = [1,7,3,4,5,6,8,9,7,8,9,0]


Nota: Este programa usa algunas reglas (programas) definidas anteriormente.


*** Programa probado en WinProlog versión 4.7 ***

viernes, 11 de mayo de 2012

PostHeaderIcon PROLOG: Ordena lista de numeros, metodo de la burbuja


Este programa ordena una lista numérica en forma ascendente. Si quieres ordenar en forma descendente cambia la linea "B < A" por "A < B":

my_bubble_sort(Xs, Ys):-
          my_append(Cs, [A,B|Ds], Xs),
          B < A,
          my_append(Cs, [B,A|Ds], Fs),
          my_bubble_sort(Fs, Ys),
          !.

my_bubble_sort(Xs, Xs).


Para ejecutar el programa:

?- my_bubble_sort([4,7,1,3,2,9,2,6], Ls).


Y el resultado es:

Ls = [1,2,2,3,4,6,7,9]


Nota: Este programa usa algunas reglas (programas) definidas anteriormente.



*** Programa probado en WinProlog versión 4.7 ***
jueves, 8 de marzo de 2012

PostHeaderIcon PROLOG: Interseccion entre dos listas


Este programa encuentra la intersección de dos listas (intersección de conjuntos):

my_intersect([], _, []).

my_intersect([A|As], Bs, [A|Cs]):-
          my_member(A, Bs),
          !,
          my_intersect(As, Bs, Cs).

my_intersect([_|As], Bs, Cs):-
          my_intersect(As, Bs, Cs).


Para ejecutar el programa:

?- my_intersect([1,2,3,4], [2,3,6,7,1], Ls).


Y el resultado es:

Ls = [1,2,3]


Nota: Este programa usa algunas reglas (programas) definidas anteriormente.



*** Programa probado en WinProlog versión 4.7 ***
miércoles, 7 de marzo de 2012

PostHeaderIcon PROLOG: Union entre dos listas


Este programa encuentra la unión de dos listas (unión de conjuntos):

my_union([], Cs, Cs).

my_union([A|As], Bs, Cs):-
          my_member(A, Bs),
          !,
          my_union(As, Bs, Cs).

my_union([A|As], Bs, [A|Cs]):-
          my_union(As, Bs, Cs).


Para ejecutar el programa:

?- my_union([a,b,c], [b,a,d,e,h], Ls).


Y el resultado es:

Ls = [c,b,a,d,e,h]


Nota: Este programa usa algunas reglas (programas) definidas anteriormente.



*** Programa probado en WinProlog versión 4.7 ***
martes, 8 de noviembre de 2011

PostHeaderIcon PROLOG: Mira si una lista es sublista de otra lista


Este programa mira si una lista es sublista de otra lista:

my_sub_list(Xs, Ys):-
          my_append(_, Bs, Ys),
          my_append(Xs, _, Bs).


Para ejecutar el programa:

?- my_sub_list([b,c], [a,b,c,d,e,f,g]).


Y el resultado es:

yes


Para ejecutar el programa:

?- my_sub_list([b,c,f], [a,b,c,d,e,f,g]).


Y el resultado es:

no


Para ejecutar el programa:

?- my_sub_list(Ls, [c,d,e]).


Y el resultado es:

Ls = [] ;
Ls = [c] ;
Ls = [c,d] ;
Ls = [c,d,e] ;
Ls = [] ;
Ls = [d] ;
Ls = [d,e] ;
Ls = [] ;
Ls = [e] ;
Ls = [] ;


Nota: Este programa usa algunas reglas (programas) definidas anteriormente.



*** Programa probado en WinProlog versión 4.7 ***
jueves, 3 de noviembre de 2011

PostHeaderIcon PROLOG: Busca numero mayor en lista


Este programa busca en una lista de números el mayor:

my_list_max(M, [X|Xs]):-
          my_list_max2(M, X, Xs).

my_list_max2(M, M, []):- !.

mylist_max2(X, Y, [Z|Zs]):-
          Z >= Y,
          !,
          my_list_max2(X, Z, Zs).

my_list_max2(X, Y, [Z|Zs]):-
          Z =< Y,
          my_list_max2(X, Y, Zs).


Para ejecutar el programa:

?- my_list_max(M, [5,3,9,2,8,7]).


Y el resultado es:

M = 9




*** Programa probado en WinProlog versión 4.7 ***

PostHeaderIcon PROLOG: Busca numero menor en lista


Este programa busca en una lista de números el menor:

my_list_min(M, [X|Xs]):-
         my_list_min2(M, X, Xs).

my_list_min2(M, M, []):- !.

my_list_min2(X, Y, [Z|Zs]):-
          Z =< Y,
          !,
          my_list_min2(X, Z, Zs).

my_list_min2(X, Y, [Z|Zs]):-
          Z >= Y,
          my_list_min2(X, Y, Zs).


Para ejecutar el programa:

?- my_list_min(M, [5,3,9,2,8,7]).


Y el resultado es:

M = 2




*** Programa probado en WinProlog versión 4.7 ***
domingo, 18 de septiembre de 2011

PostHeaderIcon PROLOG: Mira si una lista es Palindrome


Este programa revisa si una lista es palindrome. Una palabra, frase o lista es Palindrome si se lee igual hacia adelante que hacia atrás (ejemplo ana, 13531, [1,2,3,2,1], oso):


my_palindrome(Xs):-
my_reverse(Xs, Xs).


Para ejecutar el programa:


?- my_palindrome([a,b,c,d,e,d,c,b,a]).


Y el resultado es:


yes


Para ejecutar el programa:


?- my_palindrome([a,b,c,d,e]).


Y el resultado es:


no


Nota: Este programa usa algunas reglas (programas) definidas anteriormente.


*** Programa probado en WinProlog versión 4.7 ***

miércoles, 20 de julio de 2011

PostHeaderIcon PROLOG: Invierte una lista (versión 3)


Este programa invierte una lista:


my_reverse([X|Xs], Ys, Zs):-
my_reverse(Xs, [X|Ys], Zs).

my_reverse([], Ys, Ys).


Para ejecutar el programa:


?- my_reverse([1,2,3,4,5], [], Ls).


Y el resultado es:


Ls = [5,4,3,2,1]



*** Programa probado en WinProlog versión 4.7 ***

martes, 19 de julio de 2011

PostHeaderIcon PROLOG: Invierte una lista (versión 2)


Este programa invierte una lista:

my_reverse([], []).

my_reverse([X|Xs], Ys):-
          my_reverse(Xs, Zs),
          my_append(Zs, [X], Ys).


Para ejecutar el programa:

?- my_reverse([1,2,3,4,5], Ls).


Y el resultado es:

Ls = [5,4,3,2,1]


Nota: Este programa usa algunas reglas (programas) definidas anteriormente.



*** Programa probado en WinProlog versión 4.7 ***
miércoles, 29 de junio de 2011

PostHeaderIcon PROLOG: Elementos consecutivos en una lista


Este programa mira si dos elementos se encuentran consecutivos en una lista:


my_consecutive(X,Y,[X,Y|_]).

my_consecutive(X,Y,[_|Xs]):-
my_consecutive(X,Y,Xs).


Para ejecutar el programa:


?- my_consecutive(e,g,[d,f,e,g,h,e,r,u]).


Y el resultado es:


yes


Para ejecutar el programa:


?- my_consecutive(g, e, [d,f,e,g,h,e,r,u]).


Y el resultado es:


no



*** Programa probado en WinProlog versión 4.7 ***

domingo, 19 de junio de 2011

PostHeaderIcon PROLOG: Borra elemento N de una lista (versión 2)


Este programa elimina el elemento en la posición N en una lista:

my_remove_element_n(_, _, [], []).

my_remove_element_n(N, N, [_|Xs], Zs):-
          I2 is N + 1,
          my_remove_element_n(N, I2, Xs, Zs), !.

my_remove_element_n(N, I, [Y|Xs], [Y|Zs]):-
          I2 is I + 1,
          my_remove_element_n(N, I2, Xs, Zs).


Para ejecutar el programa:

?- my_remove_element_n(5, 1, [a,b,c,d,e,f,g,h], Zs).


Y el resultado es:

Zs = [a,b,c,d,f,g,h]




*** Programa probado en WinProlog versión 4.7 ***

PostHeaderIcon PROLOG: Borra elemento N de una lista


Este programa elimina el elemento en la posición N en una lista:


my_remove_element_n(1, [_|Xs], Xs).

my_remove_element_n(I, [X|Xs], [X|Ys]):-
I2 is I - 1,
my_remove_element_n(I2, Xs, Ys).


Para ejecutar el programa:


?- my_remove_element_n(5, [a,b,c,d,e,f,g,h], Zs).


Y el resultado es:


Zs = [a,b,c,d,f,g,h]



*** Programa probado en WinProlog versión 4.7 ***

viernes, 10 de junio de 2011

PostHeaderIcon PROLOG: Compresión de una lista (versión 2)


Este programa permite eliminar los elementos repetidos en una lista. A diferencia de la versión 1 de este programa, los elementos a eliminar NO tienen que estar contiguos:


my_compress([], []):- !.

my_compress([X|Xs], Ys):-
my_member(X, Xs),
!,
my_compress(Xs, Ys).

my_compress([X|Xs], [X|Ys]):-
my_compress(Xs, Ys).


Para ejecutar el programa:


?- my_compress([a,a,e,e,e,c,c,b,b,b,b,d,f], Ls).


Y el resultado es:


Ls = [a,e,c,b,d,f]


Para ejecutar el programa:


?- my_compress([e,e,e,a,a,e,e,e,c,c,b,b,b,b,d,f], Ls).


Y el resultado es:


Ls = [a,e,c,b,d,f]


Nota: Este programa usa algunas reglas (programas) definidas anteriormente.


*** Programa probado en WinProlog versión 4.7 ***

miércoles, 8 de junio de 2011

PostHeaderIcon PROLOG: Compresion de una lista


Este programa permite eliminar los elementos repetidos en una lista. Los elementos a eliminar deben estar contiguos:

my_compress([], []).

my_compress([X], [X]).

my_compress([X, X|Xs], Zs):-
          my_compress([X|Xs], Zs).

my_compress([X, Y|Ys], [X|Zs]):-
          X \= Y,
          my_compress([Y|Ys], Zs).


Para ejecutar el programa:

?- my_compress([a,a,e,e,e,c,c,b,b,b,b,d,f], Ls).


Y el resultado es:

Ls = [a,e,c,b,d,f]


Para ejecutar el programa:

?- my_compress([e,e,e,a,a,e,e,e,c,c,b,b,b,b,d,f], Ls).


Y el resultado es:

Ls = [e,a,e,c,b,d,f]




*** Programa probado en WinProlog versión 4.7 ***
martes, 31 de mayo de 2011

PostHeaderIcon PROLOG: Media aritmetica de una lista


Este programa calcula la media aritmética (promedio) de los elementos de una lista:

my_average(Xs, A):-
          my_length(Xs, L),
          my_sum_elements(Xs, S),
          A is S / L.


Para ejecutar el programa:

?- my_average([1,2,3,4,5,6], A).


Y el resultado es:

A = 3.5


Nota: Este programa usa algunas reglas (programas) definidas anteriormente.



*** Programa probado en WinProlog versión 4.7 ***

Apache Flex

Wolfram Programming Lab