Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Ayuda!. Como generar los numeros naturales en PROLOG.
Autor Mensaje
cuchodelosdecadentes Sin conexión
Campeon del cubo Rubik
soooomos los piratas ...
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 195
Agradecimientos dados: 88
Agradecimientos: 6 en 6 posts
Registro en: Dec 2011
Mensaje: #1
Ayuda!. Como generar los numeros naturales en PROLOG. Ejercicios Paradigmas de Programación
Hola a todos.
Vi un ejercicio una vez ( y ahora no lo puedo encontrar ) que pedia generar los numeros naturales en forma infinita en PROLOG.


Yo se que en haskell puedo hacer:

generarNaturalesAPartirDe numero = numero : naturalesDesde (numero+1)

Pero en prolog como seria.? Ojo entiendo lo de las listas infinitas en PROLOG, no es esa la duda. Quiero poder generar los naturales en forma infinita por mas que se cuelgue.
Cualquier pista es bienvenida.

Salu2.
20-02-2015 13:35
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
.-Fede-. Sin conexión
Profesor del Modulo A

*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 265
Agradecimientos dados: 85
Agradecimientos: 49 en 44 posts
Registro en: Nov 2011
Mensaje: #2
RE: Ayuda!. Como generar los numeros naturales en PROLOG.
Yo tambien vi ese enunciado, pregunte en fb y mande un mail a mi profesora y ninguna respuesta me gustó demasiado....

La mejor solución que encontre a ese problema fue hacer esMenor(X,Y):- between(0,Y,X).
20-02-2015 13:53
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Desert69 Sin conexión
Presidente del CEIT
Sin estado :( / "Anarquia...
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.477
Agradecimientos dados: 230
Agradecimientos: 346 en 207 posts
Registro en: Jun 2008
Mensaje: #3
RE: Ayuda!. Como generar los numeros naturales en PROLOG.
¿Qué es un número natural?

¿Cuál es la definición de natural?

[Imagen: a2.php]
[Imagen: 971aa6599664453c05cb3e42d58bbc0eo.jpg]
20-02-2015 16:35
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
vegito Sin conexión
Empleado de Fotocopiadora
Sin estado :(
**

Otra
Otra

Mensajes: 30
Agradecimientos dados: 0
Agradecimientos: 1 en 1 posts
Registro en: Nov 2014
Mensaje: #4
RE: Ayuda!. Como generar los numeros naturales en PROLOG.
(20-02-2015 16:35)Desert69 escribió:  ¿Qué es un número natural?

¿Cuál es la definición de natural?

De dar una respuesta util ni hablamos, no?
Digo, no estamos en clase ni en un parcial donde no te pueden dar la respuesta. Si el chabón pregunta es porque lo pensó y no le salió.
20-02-2015 16:49
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
cuchodelosdecadentes Sin conexión
Campeon del cubo Rubik
soooomos los piratas ...
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 195
Agradecimientos dados: 88
Agradecimientos: 6 en 6 posts
Registro en: Dec 2011
Mensaje: #5
RE: Ayuda!. Como generar los numeros naturales en PROLOG.
Ya lo hice.

natural(N) :- N is 1.
natural(N) :- natural(M), N is M + 1.

Pero hay algo que no entiendo, cuando hago la consulta natural(N) anda perfecto, genera 1 por 1 cada natural.
Pero cuando hago natural(2) o natural(3), no termina mas.

Porque ?
20-02-2015 18:51
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Desert69 Sin conexión
Presidente del CEIT
Sin estado :( / "Anarquia...
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.477
Agradecimientos dados: 230
Agradecimientos: 346 en 207 posts
Registro en: Jun 2008
Mensaje: #6
RE: Ayuda!. Como generar los numeros naturales en PROLOG.
Pasa que cuando hacés natural(2), por ejemplo, N se liga al valor 2, busca qué otros números M hay que sean naturales, y se fija que N sea ese número más 1. Con natural(M) estás entrando en una recursividad infinita, porque estás diciendo que un número es natural si existe otro número natural y blah. Primero buscás todos los naturales antes de decir que alguno lo es.

Fijate así:

natural(1).
natural(N):- M is N -1, M > 0, natural(M).

El 1 es natural because fuck you, that's why. Y además es natural todo número cuyo anterior sea un natural mayor a cero.

Creo que este predicado no es inversible, porque faltaría generar los valores de N (ya no recuerdo si había forma de decir "N es un número"). No recuerdo si "N > 0" es generador, se me ocurre que no. Si lo fuera, con eso lo sacás andando.

[Imagen: a2.php]
[Imagen: 971aa6599664453c05cb3e42d58bbc0eo.jpg]
20-02-2015 19:25
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
.-Fede-. Sin conexión
Profesor del Modulo A

*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 265
Agradecimientos dados: 85
Agradecimientos: 49 en 44 posts
Registro en: Nov 2011
Mensaje: #7
RE: Ayuda!. Como generar los numeros naturales en PROLOG.
(20-02-2015 18:51)cuchodelosdecadentes escribió:  Ya lo hice.

natural(N) :- N is 1.
natural(N) :- natural(M), N is M + 1.

Pero hay algo que no entiendo, cuando hago la consulta natural(N) anda perfecto, genera 1 por 1 cada natural.
Pero cuando hago natural(2) o natural(3), no termina mas.

Porque ?

Ojo que esto natural(N) :- N is 1. conceptualmente está mal.
El is no se usa para hacer comparaciones, para eso usamos el pattern matching, el is es para operaciones aritméticas.


(20-02-2015 19:25)Desert69 escribió:  Pasa que cuando hacés natural(2), por ejemplo, N se liga al valor 2, busca qué otros números M hay que sean naturales, y se fija que N sea ese número más 1. Con natural(M) estás entrando en una recursividad infinita, porque estás diciendo que un número es natural si existe otro número natural y blah. Primero buscás todos los naturales antes de decir que alguno lo es.

Fijate así:

natural(1).
natural(N):- M is N -1, M > 0, natural(M).

El 1 es natural because fuck you, that's why. Y además es natural todo número cuyo anterior sea un natural mayor a cero.

Creo que este predicado no es inversible, porque faltaría generar los valores de N (ya no recuerdo si había forma de decir "N es un número"). No recuerdo si "N > 0" es generador, se me ocurre que no. Si lo fuera, con eso lo sacás andando.

Claro, eso no es inversible, en el final era necesario que lo sea...N tiene que estar ligada.
20-02-2015 22:47
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
cuchodelosdecadentes Sin conexión
Campeon del cubo Rubik
soooomos los piratas ...
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 195
Agradecimientos dados: 88
Agradecimientos: 6 en 6 posts
Registro en: Dec 2011
Mensaje: #8
RE: Ayuda!. Como generar los numeros naturales en PROLOG.
(20-02-2015 22:47).-Fede-. escribió:  
(20-02-2015 18:51)cuchodelosdecadentes escribió:  Ya lo hice.

natural(N) :- N is 1.
natural(N) :- natural(M), N is M + 1.

Pero hay algo que no entiendo, cuando hago la consulta natural(N) anda perfecto, genera 1 por 1 cada natural.
Pero cuando hago natural(2) o natural(3), no termina mas.

Porque ?

Ojo que esto natural(N) :- N is 1. conceptualmente está mal.
El is no se usa para hacer comparaciones, para eso usamos el pattern matching, el is es para operaciones aritméticas.


(20-02-2015 19:25)Desert69 escribió:  Pasa que cuando hacés natural(2), por ejemplo, N se liga al valor 2, busca qué otros números M hay que sean naturales, y se fija que N sea ese número más 1. Con natural(M) estás entrando en una recursividad infinita, porque estás diciendo que un número es natural si existe otro número natural y blah. Primero buscás todos los naturales antes de decir que alguno lo es.

Fijate así:

natural(1).
natural(N):- M is N -1, M > 0, natural(M).

El 1 es natural because fuck you, that's why. Y además es natural todo número cuyo anterior sea un natural mayor a cero.

Creo que este predicado no es inversible, porque faltaría generar los valores de N (ya no recuerdo si había forma de decir "N es un número"). No recuerdo si "N > 0" es generador, se me ocurre que no. Si lo fuera, con eso lo sacás andando.

Claro, eso no es inversible, en el final era necesario que lo sea...N tiene que estar ligada.

Tenes razon, y no la puedo terminar de hacer inversible. Debe ser una boludez pero no me sale.
21-02-2015 15:07
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
.-Fede-. Sin conexión
Profesor del Modulo A

*****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 265
Agradecimientos dados: 85
Agradecimientos: 49 en 44 posts
Registro en: Nov 2011
Mensaje: #9
RE: Ayuda!. Como generar los numeros naturales en PROLOG.
Me parece que no hay una mejor solución que la que di con el between...pero bueno, hoy aprobe el final así que ya estaaa =D
21-02-2015 18:56
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 2 invitado(s)