Pliant talk forum

Pliant talk forum

Discussion: The 'Set' directive

Message posted by maybe Marcus on 2002/05/22 17:51:00
Three quickies regarding the 'Set' directive:

- Since 'Set' is not listed as a type, what it is?
- Please define the syntax and semantics of the 'each' meta
- Should the above be part of the 'Pliant data sets' page?

Message posted by maybe Hubert Tonneau on 2002/05/22 18:00:04
- Since 'Set' is not listed as a type, what it is?

It's a function building types, just like 'Array'
(Set Int) is a type.

- Please define the syntax and semantics of the 'each' meta

each identifier set [filter condition] [sort formula]
  body

identifier will be defined automatically, and will point each of the elements
in the set one after the other.
'filter' option enable to execute the body only on the elements that satisfy
the condition
'sort' option ask to scan the elements according to the formula. The result
of the formula can be any data type that Pliant knows how to order (Int, Str, etc)

- Should the above be part of the 'Pliant data sets' page?

Well, 'Set' data types have no meaning outside Pliant database engine.

What's peticulat about Pliant database engine is that it's high level, and
it's hidding the underlying implementation. So when you are using a data
though Pliant database engine, you don't know the actual type of the data.
The type you provide is only selecting the kind of operations you can do
on the data.
Message posted by maybe Marcus on 2002/05/22 19:36:26
> - Should the above be part of the 'Pliant data sets' page?

> Well, 'Set' data types have no meaning outside Pliant database engine.

Can I use 'each' to access elements in an 'Array' (of something)?
Message posted by maybe Hubert Tonneau on 2002/05/22 19:38:28
> Can I use 'each' to access elements in an 'Array' (of something)?

It should be possible, also I don't remember if it's already implemented.
Message posted by maybe Marcus on 2002/05/22 20:06:32
I am trying to test it. 

The following code does not compile, producing the message below.

Is it because 'each' cannot handle arrays? Or because the code is incorrect?

gvar Array:Int x

x += 1

each r x
 console r

Failed to compile each   ('r'  'x'  ?)
  compile file:t.pli (internals) 4 1
  compile file:t.pli (internals) 4 1
  compile file:t.pli (internals) 4 1
  parse file:t.pli (internals) 6 1
  module file:t.pli
Message posted by maybe Marcus on 2002/05/22 20:16:38
I am trying to test it. 

The following code does not compile, producing the message below.

Is it because 'each' cannot handle arrays? Or because the code is incorrect?

gvar Array:Int x

x += 1

each r x
 console r

Failed to compile each   ('r'  'x'  ?)
  compile file:t.pli (internals) 4 1
  compile file:t.pli (internals) 4 1
  compile file:t.pli (internals) 4 1
  parse file:t.pli (internals) 6 1
  module file:t.pli
Message posted by maybe Hubert Tonneau on 2002/05/22 20:22:51
Looking closer, it seems that there is a generic implementation of 'each'
for 'List' 'Array' 'Index' and 'Dictionary' generic data types in
/pliant/language/type/set/each.pli
but the function requires module /pliant/language/unsafe.pli
Message posted by maybe Marcus on 2002/05/22 23:33:03
After inserting that module and compiling the program, I get 
the following error:

You can define local variables outside functions
  compile file:t.pli (internals) 6 1
  compile file:t.pli (internals) 6 1
  compile file:t.pli (internals) 6 1
  compile file:t.pli (internals) 6 1
  parse file:t.pli (internals) 8 1
  module file:t.pli

Questions:
1- I didn't understand the error message
2- Where can I find some information about this 'safe' and
'unsafe' modules in the Pliant documentation?
 I remember seing it some where but I  don't know where.
3- What are they?
Message posted by pom on 2002/05/23 06:52:58
> I didn't understand the error message
The actual implementation of each is not so well programmed: it declares
a local variable corresponding to the identificator given as first parameter
of each. Thus, each cannot be used outside of a function, method or meta
(see local variable restriction). That is what the error message says.

> Where can I find some information about this 'safe' and
 'unsafe' modules in the Pliant documentation?

there is some info in /pliant/language/compiler/module/intro.html.
The basic difference between safe.pli and unsafe.pli is that unsafe.pli
includes features that are more likely to enable a crash of the program
(like pointers).

safe.pli     is the module to which any pliant program is, by default, linked to.
unsafe.pli   includes more "dangerous" constructions
compiler.pli includes most of what is needed for standard meta-programming
Message posted by pom on 2002/05/23 06:54:30
to test each, you may try:

gvar Array:Int x
x+=1;x+=3;x+=5

function test
  each v x
    console v eol

test
Message posted by maybe Marcus on 2002/05/23 10:52:59
Excellent, Patrice. Now I got it.

Just one thing: regarding that error message, viz.,

"You can define local variables outside functions"

I think the correct message would be:

"You *cannot* define local variables outside functions"

Message posted by pom on 2002/05/23 10:59:52
Yes! This is one of the multiple typos that may be found in error messages.
I will send a patch as soon as possible.