"Mestersirály" <mestersiraly(a)gmail.com> writes:
:-use_module(library(clpr)).
main(M) :-
{I>0, I<3},
egyes(M,I).
/*egyes(egyes_szamjegy, L):-
L=rat(10,1).*/
egyes(egyes_szamjegy,1).
-----------------------------------------------------
| ?- main(M).
! Type error in argument 2 of = /2
! 'a real number' expected, but 1 found
! goal: _130=1
-----------------------------------------------------
azt szeretnem, ha az M erteke az egyes_szamjegy string lenne.
Pontositva: azt szeretned, hogy az egyes_szamjegy _atom_ (nevkonstans)
lenne.
Mi a teendo?
A clpr konyvtar hasznalata eseten a korlat-valtozoknak lebegopontos
szamoknak kell lenniuk. (*)
Egy megoldas:
egyes(egyes_szamjegy,1.0).
Ennel szebb es altalanosabb (clpq eseten is jo) megoldas:
egyes(egyes_szamjegy, X) :- {X=1}. (**)
Ez azt az altalanos elvet koveti, hogy ha egy valtozo korlatban szerepel,
akkor kozvetlenul (egyesitessel) ne adjunk neki erteket. Ezt az elvet
celszeru betartani clpq es clpr eseten, clpb es clpfd eseten viszont ez nem
szukseges.
Miert kapom a fenti hibauzenetet
(*) miatt
(az expand package es parancs
Ez nem tudom mi :-).
hasznalataval is megkapom, valamint a kommentezett
klozzal is).
A kommentezett kloz clpq eseten mukodne, de semmikeppen sem javasolom. Clpq
eseten marad a (**) megoldas,
-Peter