r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Core] Discuss core issues

[unknown: 5]
23-Feb-2009
[12642x2]
http://www.tretbase.com/forum/viewtopic.php?f=8&t=30&p=141#p141
as-lit-word?: make function! [  

    "Returns logic on whether the val argument is as a lit-word! type"
    val
    ][
    not error? try [= :val make lit-word! :val]
]
Dockimbel
23-Feb-2009
[12644]
You're using the wrong operator, your should be using == instead 
of = to test for datatype equality.

not error? try [== :val make lit-word! :val]
[unknown: 5]
23-Feb-2009
[12645x4]
You can use that also Doc and it still works.
I have already used both in my function.
A gave the link because the one on my computer actually has the == 
symbol  instead.
I will probably update the website one later.  Still testing some 
other modifications to the function.
Dockimbel
23-Feb-2009
[12649]
>> a: 'test
== test
>> :a == make lit-word! :a
== false
>> :a = make lit-word! :a
== true
Henrik
23-Feb-2009
[12650]
Doc, the problem is that Paul never actually passes a lit-word to 
the function, so he can't test for strict-equal?. It just happens 
to work the way he wants for lit-words.
[unknown: 5]
23-Feb-2009
[12651x2]
>> as-lit-word? 'test
== true
See doc - that is with the strict equal.
Dockimbel
23-Feb-2009
[12653]
What does mean the resulting value of as-lit-word? That no error 
happened? What's the point?
[unknown: 5]
23-Feb-2009
[12654]
gotta call in for unemployment be back in awhile depending on when 
i get thru on the phone.
Dockimbel
23-Feb-2009
[12655x2]
Henrik: yeah I see now what's he is doing. The function just returns 
true for word! values passed as argument. I still don't see the point...looks 
like Paul is chasing windmills.
Paul, in your examples : as-lit-word? test is equal to : as-lit-word? 
1. Functions arguments are evaluated before the function is called 
 except if the functions arguments are defined as lit-word! in the 
specification block.
BrianH
23-Feb-2009
[12657]
Paul, your LIT-WORD? function returns true if passed a word! value, 
which breaks it.
Geomol
23-Feb-2009
[12658]
>> a: 'test
== test
>> type? a
== word!
>> type? :a
== word!
>> a: to lit-word! 'test
== 'test
>> type? a              
== word!
>> type? :a             
== lit-word!

As I see it, 'test gets evaluated to a word.
BrianH
23-Feb-2009
[12659]
LIT-WORD? needs to return false for values of other word types. That 
is its job.
Geomol
23-Feb-2009
[12660x2]
Agree.
And that is what it does, right? So no problem there?
[unknown: 5]
23-Feb-2009
[12662x5]
back.  ok it only took like 35 redial attempts to get through the 
Illinois unemployment claims service this week - unbelievable.
Ok, let me check it out
Doc, I'm testing to see if a word behaves like a lit-word.
That is all my function does.
BrianH, it doesn't break.  My function is not a replacement for lit-word? 
function.
BrianH
23-Feb-2009
[12667]
Nice to hear. Interestingly enough, you can write code in R3 without 
lit-word!, get-word! or set-word! values in the code. Not R2 though.
[unknown: 5]
23-Feb-2009
[12668x2]
Doc, the reason in the example above that mine returned true was 
because it matched the error.  But that is what I want because it 
still indicates that the word behaved in a manner of a lit-word.
That is why the function is called as-lit-word.  I changed it yesterday 
to get rid of this idea that it is matching a lit-word.
BrianH
23-Feb-2009
[12670x2]
Just add one function:


quote: func [
	"Returns the value passed to it without evaluation."
	:value [any-type!]
] [
	:value
]


And you can pretend that there are no lit-word!, get-word! or set-word! 
types. It needs R3's get-word! parameter semantics though.
(sorry for the formatting of that last message)
[unknown: 5]
23-Feb-2009
[12672x2]
I'll look into that Brian.  I don't do much with R3 right now.
Since were talking about R3, do you really need a true? function?
Henrik
23-Feb-2009
[12674]
BrianH, what exactly does the :value do in function header? What 
is passed?
[unknown: 5]
23-Feb-2009
[12675]
isn't make logic! enough?
BrianH
23-Feb-2009
[12676]
Yes, you need TRUE?. Make logic! isn't the same thing.
[unknown: 5]
23-Feb-2009
[12677]
Tell me how they are different.
Henrik
23-Feb-2009
[12678]
looking at TRUE?, it seems to have been added for readability. I 
missed it sometimes in R2.
BrianH
23-Feb-2009
[12679]
>> make logic! 0
== false
>> true? 0
== true
[unknown: 5]
23-Feb-2009
[12680]
I used make logic! mostely for the TRUE? effect in R2.
BrianH
23-Feb-2009
[12681]
I use TRUE?. That was copied from R2.
[unknown: 5]
23-Feb-2009
[12682]
Yeah but I don't need True? in that case if I have make logic!
Henrik
23-Feb-2009
[12683]
BrianH, interesting. Why is there difference? (sorry for all the 
questions)
[unknown: 5]
23-Feb-2009
[12684x2]
it was copied from r2?
make logic! works like C code.
BrianH
23-Feb-2009
[12686]
I've backported most of R3 to R2.
[unknown: 5]
23-Feb-2009
[12687x2]
I guess, I see the need for true? to be extremely limited.
I only bring it up because these are things I'm concerned about in 
R3.
Henrik
23-Feb-2009
[12689]
TRUE? is very useful in case of PICK.
[unknown: 5]
23-Feb-2009
[12690]
make logic! works in pick also
BrianH
23-Feb-2009
[12691]
Paul, you have answered Henrik's question: make logic! works like 
C code, returning true when C would. TRUE? returns true when REBOL 
would treat it as true, not C. TRUE? is useful for AND, OR and XOR 
as well.