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

Archivo del blog

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 clic en el igual

Seguidores

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 ***
martes, 24 de mayo de 2011

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


Este programa multiplica los elementos de una lista:


my_mul_elements([], S, S).

my_mul_elements([X|Xs], T, S):-
T2 is T * X,
my_mul_elements(Xs, T2, S).


Para ejecutar el programa:


?- my_mul_elements([1,2,3,4,5], 1, S).


Y el resultado es:


S = 120



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

PostHeaderIcon PROLOG: Multiplica elementos de una lista


Este programa multiplica los elementos de una lista:


my_mul_elements([], 1).

my_mul_elements([X|Xs], S):-
my_mul_elements(Xs, S2),
S is S2 * X.


Para ejecutar el programa:


?- my_mul_elements([1,2,3,4,5], S).


Y el resultado es:


S = 120



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

domingo, 22 de mayo de 2011

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


Este programa suma los elementos de una lista:


my_sum_elements([], S, S).

my_sum_elements([X|Xs], T, S):-
T2 is T + X,
my_sum_elements(Xs, T2, S).


Para ejecutar el programa:


?- my_sum_elements([1,2,3,4,5], 0, S).


Y el resultado es:


S = 15



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

miércoles, 18 de mayo de 2011

PostHeaderIcon PROLOG: Suma elementos de una lista


Este programa suma los elementos de una lista:


my_sum_elements([], 0).

my_sum_elements([X|Xs], S):-
my_sum_elements(Xs, S2),
S is S2 + X.


Para ejecutar el programa:


?- my_sum_elements([1,2,3,4,5], S).


Y el resultado es:


S = 15



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

lunes, 16 de mayo de 2011

PostHeaderIcon PROLOG: Borra elemento de una lista


Este programa elimina todas las ocurrencias de un elemento en una lista:


my_remove_element(_, [], []).

my_remove_element(Y, [Y|Xs], Zs):-
my_remove_element(Y, Xs, Zs), !.

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


Para ejecutar el programa:


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


Y el resultado es:


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



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

sábado, 14 de mayo de 2011

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


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


my_n_element([Y|_], N, N, Y).

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


Para ejecutar el programa:


?- my_n_element([m,j,k,e,w], 1, 3, X).


Y el resultado es:


X = k



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

PostHeaderIcon PROLOG: Elemento N de una lista


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


my_n_element([Y|_], 1, Y).

my_n_element([_|Xs], N, Y):-
N2 is N - 1,
my_n_element(Xs, N2, Y).


Para ejecutar el programa:


?- my_n_element([m,j,k,e,w], 3, X).


Y el resultado es:


X = k



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

PostHeaderIcon PROLOG: Borra un elemento de una lista


Este programa elimina un elemento en una lista. Si el elemento a borrar existe en la lista mas de una vez, se obtendrán varias respuestas (por backtraking) y en cada una solo se eliminara un elemento:


my_remove_one_element(X, [X|Xs], Xs).

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


Para ejecutar el programa:


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


Y el resultado es:


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


Para ejecutar el programa:


?- my_remove_one_element(b, Ys, [a,c,e]).


Y el resultado es:


Ys = [b,a,c,e]
Ys = [a,b,c,e]
Ys = [a,c,b,e]
Ys = [a,c,e,b]


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


jueves, 12 de mayo de 2011

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


Este programa devuelve el último elemento de una lista:

my_last_element(Xs, X):-
          my_append(_, [X], Xs).


Para ejecutar el programa:

?- my_last_element([m,j,k,e,w], X).


Y el resultado es:

X = w


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



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

PostHeaderIcon PROLOG: Ultimo elemento de una lista


Este programa devuelve el último elemento de una lista:


my_last_element([Y], Y).

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


Para ejecutar el programa:


?- my_last_element([m,j,k,e,w], X).


Y el resultado es:


X = w



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

PostHeaderIcon PROLOG: Primer elemento de una lista


Este programa devuelve el primer elemento de una lista:


my_first_element([X|_], X).


Para ejecutar el programa:


?- my_first_element([m,j,k,e,w], X).


Y el resultado es:


X = m



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

lunes, 9 de mayo de 2011

PostHeaderIcon PROLOG: Invierte una lista


Este programa invierte una lista:


my_reverse([], Zs, Zs).

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


Para ejecutar el programa:


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


Y el resultado es:


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


Nota: Algunas versiones de Prolog, como WinProlog, tienen la función REVERSE predefinida.


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

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


Este programa calcula la longitud de una lista:


my_length([], L, L).

my_length([_|Xs], N, L):-
N2 is N + 1,
my_length(Xs, N2, L).


Para ejecutar el programa:


?- my_length([a,b,c,d,e], 0, L).


Y el resultado es:


L = 5


Nota: Algunas versiones de Prolog, como WinProlog, tienen la función LENGTH predefinida.


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

PostHeaderIcon PROLOG: Longitud de una lista


Este programa calcula la longitud de una lista:


my_length([], 0).

my_length([_|Xs], L):-
my_length(Xs, L2),
L is L2 + 1.


Para ejecutar el programa:


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


Y el resultado es:


L = 5


Nota: Algunas versiones de Prolog, como WinProlog, tienen la función LENGTH predefinida.


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

domingo, 8 de mayo de 2011

PostHeaderIcon PROLOG: Busca elemento en una lista


Este programa permite buscar si un elemento esta dentro de una lista de elementos:


my_member(X, [X|_]).

my_member(X, [_|Ys]):-
my_member(X, Ys).


Para ejecutar el programa:


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


Y el resultado es:


yes


Para ejecutar el programa:


?- my_member(8, [1,2,5,2,1,3,4]).


Y el resultado es:


no


Nota: Algunas versiones de Prolog, como WinProlog, tienen la función MEMBER predefinida.


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

PostHeaderIcon PROLOG: Concatena listas


Este programa concatena o une dos listas:


my_append([], Cs, Cs).

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


Para ejecutar el programa:


?- my_append([a,b,c], [w,x,y,z], Ls).


Y el resultado es:


Ls = [a,b,c,w,x,y,z]


Nota: Algunas versiones de Prolog, como WinProlog, tienen la función APPEND predefinida.


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

lunes, 18 de abril de 2011

PostHeaderIcon PROLOG: N primeros numeros de la serie Fibonacci


Este programa calcula los N primeros términos de la serie de Fibonacci:

my_fibonacci(_, _, 0).

my_fibonacci(A, B, N):-
          write(A),
          write(' '),
          N1 is N-1,
          C is A + B,
          my_fibonacci(B, C, N1).


Para ejecutar el programa:

?- my_fibonacci(0, 1, 10).


Y el resultado es:

0 1 1 2 3 5 8 13 21 34 yes



*** Programa probado en WinProlog versión 4.7 ***
viernes, 15 de abril de 2011

PostHeaderIcon PROLOG: Factorial (versión 2)


Este programa calcula el factorial de un número:


my_factorial(1,F,F):- !.

my_factorial(N, T, F):-
N2 is N-1,T2 is T * N,
my_factorial(N2, T2, F).


Para ejecutar el programa:


?- my_factorial(5, 1, F).


Y el resultado es:


F = 120



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

PostHeaderIcon PROLOG: Factorial


Este programa calcula el factorial de un número:


my_factorial(1,1):- !.

my_factorial(N, F):-
N2 is N-1,
my_factorial(N2, F2),
F is F2*N.


Para ejecutar el programa:


?- my_factorial(5, X).


Y el resultado es:


F = 120



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

miércoles, 13 de abril de 2011

PostHeaderIcon PROLOG: Suma de los numeros de 1 a N (versión 2)


Este programa calcula la suma de los primeros N números enteros:

my_sum(I, I, R, R):- !.

my_sum(I, N, R, F):-
          I1 is I+1,
          R1 is R+I1,
          my_sum(I1, N, R1, F).


Para ejecutar el programa:

?- my_sum(0, 6, 0, S).


Y el resultado es:

S = 21



*** Programa probado en WinProlog versión 4.7 ***
martes, 12 de abril de 2011

PostHeaderIcon PROLOG: Suma de los numeros de 1 a N


Este programa calcula la suma de los primeros N números enteros:

my_sum(0, 0):- !.

my_sum(N, R):-
          N1 is N-1,
          my_sum(N1, R1),
          R is R1+N.


Para ejecutar el programa:

?- my_sum(6, S).


Y el resultado es:

S = 21



*** Programa probado en WinProlog versión 4.7 ***
domingo, 10 de abril de 2011

PostHeaderIcon PROLOG: Devuelve el mayor de dos numeros (versión 2)


Este programa devuelve el mayor de dos números dados:

my_max(X, Y, X):- 
          X >= Y,
          !.

my_max(_, Y, Y).


Para ejecutar el programa:

?- my_max(5, 3, Max).


Y el resultado es:

Max = 5


Para ejecutar el programa:

?- my_max(4, 8, Max).


Y el resultado es:

Max = 8


Para ejecutar el programa:

?- my_max(4, 8, 3).


Y el resultado es:

no



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

PostHeaderIcon PROLOG: Devuelve el mayor de dos numeros


Este programa devuelve el mayor de dos números dados:

my_max(X, Y, X):- 
          X >= Y.

my_max(X, Y, Y):-
          X < Y.


Para ejecutar el programa:

?- my_max(5, 3, Max).


Y el resultado es:

Max = 5


Para ejecutar el programa:

?- my_max(4, 8, Max).


Y el resultado es:

Max = 8


Para ejecutar el programa:

?- my_max(4, 8, 3).


Y el resultado es:

no



*** Programa probado en WinProlog versión 4.7 ***
sábado, 9 de abril de 2011

PostHeaderIcon PROLOG: Division de numero por otro


Este programa divide un numero en otro:

my_div_num(_, 0, _):-
          write('Error al dividir por cero'),
          !.

my_div_num(A, B, C):-
          C is A / B.


Para ejecutar el programa:

?- my_div_num(12, 4, C).


Y el resultado es:

C = 3


Para ejecutar el programa:

?- my_sum_num(12, 0, C).


Y el resultado es:

Error al dividir por cero


Para ejecutar el programa:

?- my_sum_num(12, 4, 3).


Y el resultado es:

yes


Para ejecutar el programa:

?- my_sum_num(12, 4, 5).


Y el resultado es:

no




*** Programa probado en WinProlog versión 4.7 ***
miércoles, 6 de abril de 2011

PostHeaderIcon PROLOG: Suma de dos numeros


Este programa suma dos números:

my_sum_num(A, B, C):-
          C is A + B.


Para ejecutar el programa:

?- my_sum_num(3, 4, C).


Y el resultado es:

C = 7


Para ejecutar el programa:

?- my_sum_num(3, 4, 5).


Y el resultado es:

no


Para ejecutar el programa:

?- my_sum_num(3, 4, 7).


Y el resultado es:

yes




*** Programa probado en WinProlog versión 4.7 ***
martes, 5 de abril de 2011

PostHeaderIcon PROLOG: Convenciones


Para los programas en Prolog vamos a usar las siguiente convenciones:

VARIABLE: Representa un valor simple.

Ejemplo: X = 5


VARIABLEs: Variable con letra "s" al final representa una lista de elementos.

Ejemplo: Ls = [1,2,3,4]

Apache Flex

Wolfram Programming Lab