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

World: r3wp

[Core] Discuss core issues

Sunanda
20-May-2010
[16815]
That's because [true] is a word, not a value. Try this:
     a: reduce [true]  logic? a/1  >> true
Claude
20-May-2010
[16816]
oki thanks
Terry
24-May-2010
[16817x2]
What's the advantage of using words in blocks? 
ie: [a "one b "two] vs ie2: ["a" "one" "b" "two"]
seeing you run out global word space very quickly?
Henrik
24-May-2010
[16819]
dialects and selection
Terry
24-May-2010
[16820x2]
ie2/("a")
>> "one"
so dialects then?
Pekr
24-May-2010
[16822]
yes, and the code readability maybe - ie2/("a") vs ie2/a
Henrik
24-May-2010
[16823]
using words as table keys is probably not a good idea.
Pekr
24-May-2010
[16824]
why? because of word limit? or any other consequences?
Henrik
24-May-2010
[16825]
limit, forbidden chars, etc.
Ladislav
24-May-2010
[16826x3]
word comparison is faster than string comparison
(word comparison is O(1), while string comparison is O(n))
moreover, words have context, strings don't
Geomol
24-May-2010
[16829]
Is it a benefit, that SWITCH is case insensitive?

>> s: "aA"
== "aA"
>> switch s/1 [#"A" [print "A"] #"a" [print "a"]]
A
Steeve
24-May-2010
[16830]
use strings not chars
Gregg
24-May-2010
[16831x2]
On words in blocks, if you use strings they may be duplicated as 
you copy blocks, which words aren't.
On SWITCH, I think it's consistent with REBOL in general.
Geomol
24-May-2010
[16833x3]
Steeve, no, doesn't work with strings:

>> switch s/1 ["A" [print "A"] "a" [print "a"]]
== none

s/1 is a char! And SWITCH won't find it with a string.
Gregg, "consistent"? Ahh... ;)


I was thinking about changing the string into a binary. What would 
you think FIRST used on a binary returns? I would expect a binary, 
but it's actually an integer. I sometimes have a hard time seeing 
the consistency in REBOL. But I know, it's hard to find the logic 
way in all this. So many datatypes. :)
Also changing s/1 to a string gives unwanted result:

>> s
== "aA"
>> switch to string! s/1 ["A" [print "A"] "a" [print "a"]]
A


So I end up with getting the integer value of a char to make this 
work:

>> switch to integer! s/1 [65 [print "A"] 97 [print "a"]]
a

Not so good, as I see it.
Steeve
24-May-2010
[16836x2]
Ah! it's probably impossible to convert a char! into a string!, so 
forget it...
hmmm. I just realized that you asked for insensitive case
Geomol
24-May-2010
[16838x2]
Yes, I need to test on chars in a string, and #"a" should be different 
from #"A".
The only way using SWITCH, I see, is to operate with ascii values, 
and that isn't good.
Steeve
24-May-2010
[16840]
well, just use parse instead, its mostly the same structure than 
a switch.

parse/case s [
	#"A" (do something)
           | #"a" (...)
           | ...
]
Geomol
24-May-2010
[16841]
Yes, parse can be used. My motivation was thoughts about switch. 
It seems, it could be improved.
Andreas
24-May-2010
[16842x4]
REBOL3 is pretty consistently case-ignorant in this regard:
>> #"a" = #"A"
== true
And the SWITCH behaviour is just consistent with that.
(R2 is more inconsistent in this regard, as #"a" = #"A" is false, 
but SWITCH behaves case-insensitively, as you described.)
PeterWood
25-May-2010
[16846]
>> #"a" == #"A" 
 
== false

Perhaps SWITCH needs a /Strictly refinement?
Gregg
25-May-2010
[16847x2]
SWITCH used to be a mezzanine, so you could easily patch it if you 
want. This is the old mezz source.

switch: func [
    [throw]
    value
    cases [block!]
    /default case
][
    either value: select cases value [do value] [
        either default [do case] [none]]
]
I use SWITCH very rarely, but I don't know about others.
Izkata
25-May-2010
[16849]
/case would be more consistent with 'find, 'parse, and 'select than 
/strictly would
Geomol
25-May-2010
[16850]
The char! datatype has many similarities to numbers. The following 
is from R3 and looks strange to me:

>> var - 32 = var
== true


What variable is equal to it's original value, even if you subtract 
32 from it?

>> var: #"a"
== #"a"
>> var - 32 = var
== true


A bit strange. I would prefer SWITCH to distinguish between #"a" 
and #"A".
Rebolek
25-May-2010
[16851]
>> (var - 32) = var
== false
Geomol
25-May-2010
[16852x2]
This can be even more complicated when talking UTF encoding. Hm, 
who knows how R3 do this...
Rebolek, do it in R3.
Rebolek
25-May-2010
[16854x4]
I'm not sure what exactly [var - 32 = var
Ah, ok, this was R2.
Yes, in R3, it's true.
I agree with you, this is strange.
Steeve
25-May-2010
[16858]
>> #"a" - 32
== #"A"

>> #"a" - 32 == #"a"
== false

>> #"a" - 32 = #"a"
== true

it's ok to my mind
PeterWood
25-May-2010
[16859]
Izkata: /strict could also striclty equal to numbers to give an alternative 
to :

>> number: 1

== 1
>> switch number [1 [print 1] 1.0 [print 1.0]]

1

>> number: 1.0

== 1.0

>> switch number [1 [print 1] 1.0 [print 1.0]]

1
Gregg
25-May-2010
[16860]
I think the var - 32 scenario is fine as well. It's all about context, 
and by making it work the other way, you're just shifting the problem, 
not really solving it. That is, something becomes easier, but something 
else becomes harder.
Geomol
26-May-2010
[16861]
Gregg, are you really sure, you mean this? As I see it, the life 
would be much easier, if "a" equals "A", but #"a" didn't equal #"A". 
As it is now, it's really problematic testing for different characters 
in a string using SWITCH. Cases where "a" and "A" should be handled 
as the same is ok, but cases where they should be different is the 
problem. If #"a" was made to not be the same as #"A", then both situations 
could be coped with easily.
PeterWood
26-May-2010
[16862]
At the moment Switch is consistent with Equal?. Surely, it would 
be better to retain that consistency and have a /strict refinement 
for switch which perfomed consistently with strict-equal? ?
Geomol
26-May-2010
[16863x2]
Peter, the equal thing is correct for R3, not R2, which we still 
get updates for now and then.
In other words, SWITCH is not consistent with EQUAL in R2, when talking 
the char! datatype.