home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!mcsun!uknet!bcc.ac.uk!link-1.ts.bcc.ac.uk!ucjtrjf
- From: ucjtrjf@ucl.ac.uk (Jonny Farringdon)
- Newsgroups: comp.lang.prolog
- Subject: Re: fuzzy unification of floating point numbers
- Message-ID: <1992Aug14.093549.5088@bas-a.bcc.ac.uk>
- Date: 14 Aug 92 09:35:49 GMT
- References: <1992Aug12.210954.15241@cs.ucla.edu>
- Organization: Bloomsbury Computing Consortium
- Lines: 36
-
- Mike,
-
- I think i mis-understood what you were after, ie equality matching rather than
- unification. So (ummm) is this the kind of thing you want?
-
- That the kind of thing, so you can supply constants or variables?
- how about ....
-
- fuzzy_unify(A,B) :-
- fuzzy_range(FR),
- not( var(A) ),
- not( var(B) ), !,
- Diff is A - B,
- absolute_value(Diff,Abs_Diff),
- Abs_Diff < FR.
-
- fuzzy_unify(A,B) :-
- fuzzy_range(FR),
- not( var(A) ),
- var(B), !,
- random(Rand),
- Addition is FR * Rand,
- random_sign(Sign), % returns -1 or +1
- B is (Sign*Addition) + A.
-
- fuzzy_unify(A,B) :-
- fuzzy_range(FR),
- var(A),
- not( var(B) ), !,
- fuzzy_unify(B,A). % allows A or B it be variables
-
- fuzzy_unify(A,A), !.
-
-
- so either A or B or Both can be variable, plus it works if NO fuzzy_range is
- specified. Hope that is of more help, J. ucjtrjf@ucl.ac.uk
-