UTNianos

Versión completa: [Consulta] Parad. de programacion
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola tengo algunas dudas con paradigmas,

1) no que queda claro para que sirve concretamente "member" en Logica. Lei los apuntes pero no lo explica muy claro agradeceria su ayuda.

2) y como hago por compreension esto

persona(ana,auto).
persona(daniel,auto).
persona(daniel,moto).
persona(daniel,bicicleta).
persona(luis,moto).

propietarios(Persona):-persona(Persona,_).

en la consulta los propietarios serian

1? propietarios(Persona).

Persona=ana;
Persona=daniel;
Persona=daniel;
Persona=daniel;
Persona=luis.

lo que quiero es que no se repita, como soluciono eso??
Cita:http://www.swi-prolog.org/pldoc/man?predicate=member/2
member(?Elem, ?List)
True if Elem is a member of List.

Mucho mas no hay para agregar (creo)...se verifica si Elem es un elemento de la lista List
Hola! member es un predicado de aridad 2 (que requiere 2 parámetros) que indica si el primer parámetro está incluido en el otro, siendo que el primero es un elemento, y el segundo una lista. Ejemplo:

member(1, [1,2,3]). True.
member(X, [1,2,3]).
X = 1;
X = 2;
X = 3;

member es inversible a izquierda únicamente. Y el predicado no es de Lógico, que es un paradigma, sino de Prolog, que es un lenguaje que representa al paradigma Lógico a su manera. (aclaro porque es común, y erróneo, mezclar un paradigma con un lenguaje).

Saludos!
La pregunta es... qué es lo que no te queda claro de el predicado member a vos?.
Más allá de lo que expusieron más arriba los compañeros, que es lo que hacía que vos no entendieras esto.
No se olviden de que en lógico hablámos en lógico: member es un predicado de aridad 2 que relaciona un elemento con una lista a la que pertenece =)
El punto 2 como lo resolverian?
mmm, generalmente en las clases de PdeP te dicen que no te preocupes si se repiten las soluciones (corrijanme si me equivoco)

Si lo queres por comprension (en una lista?) podes hacer esto

propietarios([Personas]):- forall(persona(Persona, _), member(Persona, Personas)).

me encuentro con un ejercicio y el problema es algo similar a esto.

persona(ana,2000).
persona(juan,1000).
persona(pedro,2500).

sumaDinero(Dinero):-persona(_,Dinero).

?- sumaDinero(Dinero).

Dinero=2000;
Dinero=1000;
Dinero=2500.

La idea es sumar todo. Habria que usar recursividad?
Qué viste de dicho paradigma?. Viste como generar listas?.
Lo que estás haciendo ahí es mostrando toda la gente que tiene dinero, no estás haciendo nada más.
Para ese caso lo mejor es hacer un findall y luego sumar el contenido de la lista que se generó.
URLs de referencia