Hi Lad,

> I have got a few notes:
>
> 1) I am still not convinced, that a "get argument", (alias "fetched
> argument") is a good argument passing method. The disadvantage of it is,
> that you cannot easily supply a result of an expression as an argument.

yes, but it is so elegant to write

    anti equal?

instead of

    anti :equal?

but i agree, the :arg notation is never used and it requires a reference to a
value instead of the "value itself", so it is not totally "correct" to be used
it in context like this.

About Scheme people, if they would speak "in general", they could be right: we
cannot create an anti :do and anti :make which work in every situations, but
if they speak only of strict bolean functions, i think they are wrong ;-)

> 2) Otherwise your solution is very close. The only bug is probably this:
>
>  >> f: func [get] [true]
>  >> anti-f: anti f
>  >> anti-f false
> ** Script Error: Cannot use path on logic! value
> ** Where: anti-f
> ** Near: native func [get][true] get/any 'get

yes, i forgot to delay the get/any insertion after the bind to the function
context.

there are many modes to do it, and this is one of them:

.
.
.
.
.
.
.
.
.
.
.
.
.
.

anti: func [[catch] f /local body x][
 insert insert tail body: make block! 2 + length? first :f :not :f
 parse first :f [
  any [
   [end | refinement!] break |
   set x word! (insert tail body to lit-word! x) |
   (make error! "get and lit arguments not handled")
  ]
 ]
 x: next next second f: throw-on-error [make function! first :f body]
 while [not tail? x][x: next insert/only x 'get/any]
 :f
]

---
Ciao
Romano

-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.

Reply via email to