Re: Need some help with function arguments

2013-10-18 Thread Alexander Burger
Hi Jon,

> Thanks a lot! That works very fine.

Great :)


> And by the way, I receive mail from the list without problems now.
> It seems it was something with the mail system here at UiO; I had
> moved my PicoLisp inbox from local to server, but I hadn't updated
> my filter accordingly. ;-)

Good to know. Unfortunately, there are still list members who don't
receive the mails reliably. It would be good to have some rules or
suggestions about how to handle this.

♪♫ Alex
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


Re: Need some help with function arguments

2013-10-18 Thread Jon Kleiser

Hi Alex,

Thanks a lot! That works very fine.

And by the way, I receive mail from the list without problems now. It 
seems it was something with the mail system here at UiO; I had moved my 
PicoLisp inbox from local to server, but I hadn't updated my filter 
accordingly. ;-)


/Jon

On 18-10-13 13:52 , Alexander Burger wrote:

Hi Jon,


I would like collect file extensions into an idx tree X, and for
each file F I think this expression should do the work:

(let L (chop F) (when (index '. L) (idx 'X (pack (stem L '.)) T)))

Now I want to make this into a function with the name 'collectExt'
and arguments for X and F, which should be pretty trivial, but it
seems I'm having problems with the X argument. Can anybody tell me
how to do it?

You just have to remove the quote before the 'X' then:

(de collectExt (X F)
   (let L (chop F)
  (when (index '. L)
 (idx X (pack (stem L '.)) T) ) ) )

BUT!!: This is a typical case where you might get a symbol conflict. If
you call it as:

(collectExt 'I "abc.zip")

it works, but not if call as

(collectExt 'X "abc.zip")

This is why the FAQ recommends transient symbols for "a parameter or
local, when that symbol might possibly be (directly or indirectly) bound
to itself".

Thus, if you do

(de collectExt ("Var" F)
   (let L (chop F)
  (when (index '. L)
 (idx "Var" (pack (stem L '.)) T) ) ) )

: (collectExt 'I "abc.zip")
->  NIL
: I
->  ("zip")

: (collectExt 'X "abc.zip")
->  NIL
: X
->  ("zip")

♪♫ Alex


--
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


Re: Need some help with function arguments

2013-10-18 Thread Alexander Burger
Hi Jon,

> I would like collect file extensions into an idx tree X, and for
> each file F I think this expression should do the work:
> 
> (let L (chop F) (when (index '. L) (idx 'X (pack (stem L '.)) T)))
> 
> Now I want to make this into a function with the name 'collectExt'
> and arguments for X and F, which should be pretty trivial, but it
> seems I'm having problems with the X argument. Can anybody tell me
> how to do it?

You just have to remove the quote before the 'X' then:

   (de collectExt (X F)
  (let L (chop F)
 (when (index '. L)
(idx X (pack (stem L '.)) T) ) ) )

BUT!!: This is a typical case where you might get a symbol conflict. If
you call it as:

   (collectExt 'I "abc.zip")

it works, but not if call as

   (collectExt 'X "abc.zip")

This is why the FAQ recommends transient symbols for "a parameter or
local, when that symbol might possibly be (directly or indirectly) bound
to itself".

Thus, if you do

   (de collectExt ("Var" F)
  (let L (chop F)
 (when (index '. L)
(idx "Var" (pack (stem L '.)) T) ) ) )

   : (collectExt 'I "abc.zip")
   -> NIL
   : I
   -> ("zip")

   : (collectExt 'X "abc.zip")
   -> NIL
   : X
   -> ("zip")

♪♫ Alex
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe