Re: [fpc-pascal] newbie questions

2010-04-24 Thread Marc Weustink

spir ☣ wrote:

On Tue, 20 Apr 2010 01:17:51 +0200
Marc Weustink  wrote:


Somehow I get the idea that you mix the definition/use of sets with arrays.


Yes, it seems Pascal sets are rather related to enums than collections. I mean 
they look like packs of kinds of flags, which themselves are named but 
value-free indicators.
If I'm right, enums are sequences of such flags.


Correct.

Marc

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] newbie questions

2010-04-22 Thread spir ☣
On Tue, 20 Apr 2010 01:17:51 +0200
Marc Weustink  wrote:

> Somehow I get the idea that you mix the definition/use of sets with arrays.

Yes, it seems Pascal sets are rather related to enums than collections. I mean 
they look like packs of kinds of flags, which themselves are named but 
value-free indicators.
If I'm right, enums are sequences of such flags.

Denis


vit esse estrany ☣

spir.wikidot.com
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] newbie questions

2010-04-19 Thread Marc Weustink

spir ☣ wrote:

Hello,

Total Pascal newbie here. Looked for answers in various references and 
tutorials, but cannot find.

Fore-question: Is there a (free)pascal teaching/learning mailing list? (Like python's 
"tutor" list.) If not, is this one a proper place?

* How does one declare the type of set items?
   numbers : Set of Integer // error


A set can only have 256 elements, in you case that would have been 4G 
elements.

So the max is
  TByteSet = set of Byte;

but usually a set (or enum) is given a reable name like

  TMyEnum = (one, two, three);
  TMySet = set of TMyEnum;


* How does one define the _value_ of a Set or Array?
   numbers := (1,2,3)   // error
   numbers := [1,2,3]   // error


const
  Numbers: array[0..3] of integer = (1, 2, 3, 4);
  MySet: TMySet = [one, three];


Somehow I get the idea that you mix the definition/use of sets with arrays.

Marc
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] newbie questions

2010-04-19 Thread Howard Page-Clark



Does this mean that to be able to define a literal value like "byteset := [0, 3, 
101]"
>for a set (and probably for an array) I must have defined a custom 
type for it; correct?
> (It's the only difference I see with my trials: numbers in my code is 
not of a custom type but simply a var of type "Set of Integer".)

What I mean is, if the value is a literal, instead of only declaring the var then 
defining its value, one must first make a custom type for it? I don't understand the 
need&  purpose of custom types except for records&  enums; but this may be 
caused by the fact I come from dynamic languages.



Yes, you have to use the "typeName = set of .." type declaration to 
introduce sets.
You can't have a "set of integer" because that would have more than 256 
elements, and in FP (and Delphi I think) the implementation of sets is 
limited by that storage constraint.
Custom set types are often used in Pascal to enable meaningful names to 
be used for bitmapped values that would otherwise be hard-to-interpret 
numbers. For instance, the styles of the Font class are defined thus:


TFontStyle = (fsBold, fsItalic, fsStrikeOut, fsUnderline);
TFontStyles = set of TFontStyle;

If a font is both bold and italic its Style property will have the 
numerical value 3. However it is difficult to figure out what "3" means 
as a combination of styles. To express it as a combination of named set 
elements "fsBold" and "fsItalic" is self-explanatory - the very reason 
most of us prefer Pascal to many other languages.


Drop a TButton on a blank form of a new project. Add typinfo to the uses 
clause, and put this code in the OnClick event of the button.


procedure TForm1.Button1Click(Sender: TObject);
var styleset: TFontStyles;
b: byte absolute styleset;
begin
  if Font.Style = [] then
Font.Style:= Font.Style + [fsBold] + [fsItalic];
  styleset := Font.Style;
 ShowMessage(Format('Font.Style has the value "[%s]" or, as a numerical 
value "%d"',
  [SetToString( FindPropInfo(Font, 'style'), integer(Font.Style) ), b ] 
) );

end;

See how the numerical value of Font.Style is not very useful?
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] newbie questions

2010-04-19 Thread Alberto Narduzzi

Thank you.
Does this mean that to be able to define a literal value like "byteset := [0, 3, 101]" 
for a set (and probably for an array) I must have defined a custom type for it; correct? (It's the 
only difference I see with my trials: numbers in my code is not of a custom type but simply a var 
of type "Set of Integer".)
What I mean is, if the value is a literal, instead of only declaring the var then 
defining its value, one must first make a custom type for it? I don't understand the 
need & purpose of custom types except for records & enums; but this may be 
caused by the fact I come from dynamic languages.


IIRC, you need define a custom type (e.g. TByteSet = Set Of Byte) only 
if you need to pass it to a function, that is, you cannot write:


Function CheckMySet(Var I:Set Of Byte):Integer;

but

Function CheckMySet(Var I:TByteSet):Integer;


Then, as you've been told, sets are represented as 0/1 bits in an array 
of 32 bytes (32 x 8 = 256), hence in your set you can only have values 
from 0 to 255 => no integers here...


For "sets" including bigger values, such as integers (or even reals) you 
could use a TStringList and its IndexOf(); thou' it may not be 
performant. Or use an array of sets...


Just my 2c.

A.



___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] newbie questions

2010-04-19 Thread spir ☣
On Mon, 19 Apr 2010 16:36:06 +0100
Howard Page-Clark  wrote:

> On 19/4/10 3:50, spir ☣ wrote:
> > Hello,
> >
> > Total Pascal newbie here. Looked for answers in various references and 
> > tutorials, but cannot find.
> >
> > Fore-question: Is there a (free)pascal teaching/learning mailing list? 
> > (Like python's "tutor" list.) If not, is this one a proper place?
> >
> > * How does one declare the type of set items?
> > numbers : Set of Integer// error
> >
> type
>   Tbyteset = set of byte;
> 
> > * How does one define the _value_ of a Set or Array?
> > numbers := (1,2,3)  // error
> > numbers := [1,2,3]  // error
> 
> var
>   byteset : Tbyteset;
> 
> begin
>   byteset := []; // empty set
>   byteset := [0, 3, 101]; // puts literal values into the set
>   Include(byteset, 27]; // or byteset := byteset + [27];
>   Exclude(byteset, 3); // or byteset := byteset - [3];
> end;
> 
> Note that set types are limited to 256 elements of ordinal types 
> (integer, char or enumeration).
> 
> Howard

Thank you.
Does this mean that to be able to define a literal value like "byteset := [0, 
3, 101]" for a set (and probably for an array) I must have defined a custom 
type for it; correct? (It's the only difference I see with my trials: numbers 
in my code is not of a custom type but simply a var of type "Set of Integer".)
What I mean is, if the value is a literal, instead of only declaring the var 
then defining its value, one must first make a custom type for it? I don't 
understand the need & purpose of custom types except for records & enums; but 
this may be caused by the fact I come from dynamic languages.

Denis


vit esse estrany ☣

spir.wikidot.com
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] newbie questions

2010-04-19 Thread Howard Page-Clark

On 19/4/10 3:50, spir ☣ wrote:

Hello,

Total Pascal newbie here. Looked for answers in various references and 
tutorials, but cannot find.

Fore-question: Is there a (free)pascal teaching/learning mailing list? (Like python's 
"tutor" list.) If not, is this one a proper place?

* How does one declare the type of set items?
numbers : Set of Integer// error


type
Tbyteset = set of byte;


* How does one define the _value_ of a Set or Array?
numbers := (1,2,3)  // error
numbers := [1,2,3]  // error


var
byteset : Tbyteset;

begin
byteset := []; // empty set
byteset := [0, 3, 101]; // puts literal values into the set
Include(byteset, 27]; // or byteset := byteset + [27];
Exclude(byteset, 3); // or byteset := byteset - [3];
end;

Note that set types are limited to 256 elements of ordinal types 
(integer, char or enumeration).


Howard
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


[fpc-pascal] newbie questions

2010-04-19 Thread spir ☣
Hello,

Total Pascal newbie here. Looked for answers in various references and 
tutorials, but cannot find.

Fore-question: Is there a (free)pascal teaching/learning mailing list? (Like 
python's "tutor" list.) If not, is this one a proper place?

* How does one declare the type of set items?
   numbers : Set of Integer // error

* How does one define the _value_ of a Set or Array?
   numbers := (1,2,3)   // error
   numbers := [1,2,3]   // error

Thank you for your patience!

Denis


vit esse estrany ☣

spir.wikidot.com
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal