Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search

[REBOL] Sameness - a pragmatic approach.

From: lmecir::mbox::vol::cz at: 11-Feb-2003 8:36

In my opinion the best sameness should be the one that is the most useful for a purpose, for which it is normally used. My model task is: let's have a block B with length 2. Let's suppose, that our partner tells us, that his function F has inserted a value V into it. Our task is to find the position at which the given value is. The first implementation: implementation1: func [b [block!] v [any-type!]] [ either equal? first b get/any 'v [1] [2] ] This implementation has got the following disadvantage: v: [1] b: [[1]] insert/only tail b v implementation1 b v ; == 1 , although we know, that the value V has been stored at the position 2. Let's improve our implementation using SAME? instead of EQUAL?: implementation2: func [b [block!] v [any-type!]] [ either same? first b get/any 'v [1] [2] ] implementation2 b v ; == 2 Which is better than before. Nevertheless, Joel showed that IMPLEMENTATION2 isn't optimal, because: v: 3.0 b: [3] insert/only tail b v implementation2 b v ; == 1 , while the correct answer is 2. My last implementation will use my IDENTICAL? function (described in ). do implementation3: func [b [block!] v [any-type!]] [ either identical? first b get/any 'v [1] [2] ] implementation3 b v ; == 2 In the above mentioned article I proved, that there is no other function, which could be used instead of the IDENTICAL? function for a new implementation and help us to get the correct answer with higher probability than IMPLEMENTATION3. Regards -L