comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Newbie Q
Date: Tue, 20 Sep 2005 09:58:45 +0200
Date: 2005-09-20T09:58:35+02:00	[thread overview]
Message-ID: <7s94kvyimovp$.1jx9yjqnjmfwx$.dlg@40tude.net> (raw)
In-Reply-To: RkJXe.771$OC2.358@newssvr21.news.prodigy.com

On Tue, 20 Sep 2005 01:11:13 GMT, Larry Luther wrote:

> I saw the following example in "Ada Programming" Wiki book:
> 
> if Temperature >= Degrees'(40.0) then
>     Put_Line ("It's extremely hot");
> elsif Temperature in Degrees'(30.0 .. 39.0) then
>     Put_Line ("It's hot");
> elsif Temperature in Degrees'(20.0 .. 29.0) then
>     Put_Line ("It's warm");
> elsif Temperature in Degrees'(10.0 .. 19.0) then
>     Put_Line ("It's cool");
> elsif temperature in Degrees'(0.0 .. 9.0) then
>     Put_Line ("It's cold");
> else
>     Put_Line ("It's freezing");
> end if;
> 
> What happens at 29.5 degrees?
> I'm assuming that "Temperature in Degrees'(20.0 .. 29.0)" will test
> the interval Temperature >= 20.0 through Temperature <= 29.0.
> So temperatures between 29.0 and 30.0 will be considered "freezing".

You are right. The code above is that it tries to implement the thing known
as "linguistic variables", maybe unconsciously.

The terms (linguistic variables) "extremely hot", "hot", "warm" are fuzzy
subsets of temperatures (not necessary intervals.) Further they can
overlap, as they actually do: the same temperature might appear both cold
and cool for you. The thing the code above implements is called
"fuzzification." The implementation is of course wrong:

1. The result is in general case at least a subset of "extremely hot",
"hot", "warm" etc. The variables may overlap.

2. The result is not crisp. It might be 1:cold, 0.5 cool, 0.3 freezing.

3. The set of variables should be complete. That is: the union of
"extremely hot", "hot", "warm" should comprise all possible temperatures.
This is what you have discovered with 29.5�C, which cannot be classified as
any temperature!

For an example of dealing with linguistic variables in Ada, see:
http://www.dmitry-kazakov.de/ada/fuzzy.htm#linguistic_variable

One final note. Ada does not have case-statement for real types because of
1-3. Even considering real numbers as pure numbers having no any semantics,
they are intervals, which *model* margins aren't crisp (for the portability
reasons.) So unlikely to discrete types, the case-statement cannot ensure:
completeness and consistency. Neither any user-written program can. The
attempt above perfectly illustrates this.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



      parent reply	other threads:[~2005-09-20  7:58 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-20  1:11 Newbie Q Larry Luther
2005-09-20  4:09 ` Jim Rogers
2005-09-20  5:48   ` Martin Dowie
2005-09-20 11:52   ` Dr. Adrian Wrigley
2005-09-20 13:33     ` Martin Dowie
2005-09-21 17:24     ` Martin Dowie
2005-09-20  4:09 ` Samuel Tardieu
2005-09-20  5:52   ` Simon Wright
2005-09-20  6:28     ` Samuel Tardieu
2005-09-20 16:26   ` Martin Krischik
2005-09-21  7:27     ` Samuel Tardieu
2005-09-20  7:58 ` Dmitry A. Kazakov [this message]
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox