World: r3wp
[Core] Discuss core issues
older newer | first last |
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. | |
PeterWood 26-May-2010 [16865] | You are correct, I was mistaken about the R2 behaviour. |
Gregg 26-May-2010 [16866] | First, it should be consistent between R2 and R3 if at all possible. For SWITCH, I think the solution is to add a refinement if people think it's needed. If the new native SWITCH is still based on SELECT, adding a /CASE refinement shouldn't be hard. For the more general case of char case-sensitivity, we have ==/strict-equal? |
older newer | first last |