write unificacion swi sintaxis reglas programas formularios ejemplos conocimiento prolog rule

swi - unificacion prolog



Prolog O(;) Regla Devuelve Resultado MĂșltiple (2)

En primer lugar, debe poner ( y ) alrededor de su objetivo combinado con ; . Porque actualmente lo interpreta como disyunción de customer(...),...,isguarantor(Guarantor,Name), ispersonalloan(...) , ishouseloan(...) , ..., iscarloan(...) . Eso se debe a las diferentes prioridades de los operadores , y ; .

En realidad ; - Significa real "o", no "mutuamente exclusivo o" y no "en otro caso". Entonces, si "ishouseloan" puede "tener éxito junto con" ispersonalloan ", tendrás varios objetivos exitosos. En este ejemplo, once/1 puede ayudar (y not(not(...)) ), pero puede tratar de obtener un prólogo más profundo con su tarea y especificar objetivos no permanentes como (hago algunas suposiciones personales sobre la superposición de isXXX ) :

isloan(LT, Am, T):- (ishouseloan(LT,Am,T) ;iscarloan(LT,AM,T) ;not((ishouseloan(LT,Am,T);iscarloan(LT,AM,T))), (ispersonalloan(LT,Am,T) ;isbusinessloan(LT,Am,T) ) )

En este caso, debería poder generar todos los préstamos cuando su LT , Am y T todavía no están vinculados a valores específicos y aquellos isXXX pueden vincular variables libres.

he definido una regla con o operador pero devuelve múltiples verdaderos o falsos.

isloanaccept(Name,Guarantor,LoanType,LoanAmount,LoanTenure) :- customer(Name,bank(_),customertype(_), citizen(Ci),age(Age),credit(C), income(I),property(_),bankemployee(_)), Ci == ''malaysian'', Age >= 18, C > 500, I > (LoanAmount / LoanTenure) / 12, isguarantor(Guarantor,Name), ispersonalloan(LoanType,LoanAmount,LoanTenure); ishouseloan(LoanType,LoanAmount,LoanTenure); isbusinessloan(LoanType,LoanAmount,LoanTenure); iscarloan(LoanType,LoanAmount,LoanTenure).

En realidad, necesito verificar si el tipo de préstamo cumple con el requisito particular del préstamo y lo combino con una regla general.

En otras palabras, necesito definir la regla anterior de esta manera.

Ci == ''malaysian'', Age >= 18,C > 500, I > (LoanAmount / LoanTenure) / 12, isguarantor(Guarantor,Name) Or with (ispersonalloan(LoanType,LoanAmount,LoanTenure); ishouseloan(LoanType,LoanAmount,LoanTenure); isbusinessloan(LoanType,LoanAmount,LoanTenure); iscarloan(LoanType,LoanAmount,LoanTenur)

Debería devolver 1 verdadero / falso en lugar de instrucción múltiple en la línea de comando.

Cada uno de los valores booleanos devueltos por la regla 1 que no quiero después de haber verificado la regla en la línea de comandos. Necesito tener esto (Regla general & (Múltiple o regla)).

¿Cómo combinar varios o reglas que devuelven 1 valor booleano?

Por favor ayuda.

Gracias.


Simplemente rodee todos sus objetivos "orientados" con once .

p.ej

once( ispersonalloan(LoanType,LoanAmount,LoanTenure); ishouseloan(LoanType,LoanAmount,LoanTenure); isbusinessloan(LoanType,LoanAmount,LoanTenure); iscarloan(LoanType,LoanAmount,LoanTenure) ).

Ahora, los objetivos "ordenados" tienen éxito o fracasan.