World: r3wp
[I'm new] Ask any question, and a helpful person will try to answer.
older newer | first last |
DideC 10-Mar-2005 [26] | ctx: context bind [ chars: charset [ #"A" - #"Z" #"a" - #"z" #"0" - #"9" #"-" #"_"] non-chars: complement chars set 'copy-word has [start end end-rule car-pos] [ if any [not focal-face not caret] [exit] car-pos: index? caret end-rule: copy [] parse/all head caret [ any [ start: some chars end: ( if all [car-pos >= index? start car-pos <= index? end] [end-rule: 'break] ) end-rule | some non-chars (start: end: none) ] ] if all [start end] [write clipboard:// probe copy/part start end] ] ] in system/view 'focal-face view layout [ area "This is some text to test" text "To copy the word under the cursor : hit CTRL+K or press the button bellow" button "Copy word" #"^K" [copy-word] ] |
Anton 10-Mar-2005 [27x3] | There's a nice example of BIND. The whole block of words is first BINDed to the system/view object. Only the words that already exist in system/view (like 'copy-word) will be rebinded, (because objects cannot be extended with new words). |
*Then* CONTEXT starts building a new object! of its own, from the spec block of binded words. But it only puts the set-words (eg. chars: non-chars: but *not* 'copy-word) into the new object. | |
So it's a double-bind :-) | |
Luisc 10-Mar-2005 [30x2] | Thank you DideC this is what i was looking , i thought that parse will do the trick I just did not know how. All i need to do now is see how fast this works with a 100KB text file. |
I have been looking at scripts Anton on Bind ( found over 40 at rebol) . This is great !!! 8D | |
DideC 10-Mar-2005 [32] | I'm not a parse guru myself. May be there is a simpler solution. |
Luisc 10-Mar-2005 [33] | donno but it does what i need =) and it looks "easy" hmmm I can see why someone can get addicted to rebol. I need to study more about bind and parse. |
Henrik 10-Mar-2005 [34] | is it possible to use an object variable for a VID item, such as obj: make object! [t: none] where I would like view layout [obj/t: button "hello"] in some way? it doesn't work... |
Ammon 10-Mar-2005 [35] | Yes, it is possible but requires a little work... |
Anton 10-Mar-2005 [36] | o: context [var: none] layout [button with [o/var: self]] o/var/type ;== face o/var/style ;== button |
Ammon 10-Mar-2005 [37] | Hm... Most elegant solution to that problem that I have seen! |
BrianW 10-Mar-2005 [38] | very nice indeed :-) |
Anton 10-Mar-2005 [39x3] | You just need to watch out for button facets which have the same name as your object 'o |
For example, don't do this: text: context [var: none] layout [button with [text/var: self]] ** Script Error: Cannot use path on none! value ** Where: forever ** Near: text/var: self | |
You could avoid that with some binding. | |
Henrik 10-Mar-2005 [42] | thanks for the suggestions :-) I'm doing it differently now though... |
Anton 10-Mar-2005 [43] | The most elegant solution would be to patch layout so it accepts set-paths. |
Normand 12-Apr-2005 [44] | Speaking of double bind, I have no clue of the how-to to this clue. In Ocaml we can make co-recursive definitions, also with negation. But when I try this on Rebol, it claims the value before I have the time to define it: a: not b and b: not a. Interp: ** script error, b has no value. What is the method ? Or are we out of paradise? I could use that as a form of loop, or a form of lexical closure to model some linguistic phenomenas. But how? We know the problems of complement of complement, but as a function value it should be feasible. |
JaimeVargas 12-Apr-2005 [45x2] | Do you have an example, besides: a: not b b: not a |
In rebol this are executed serially, so the first statement fails because b is not defined. | |
Normand 12-Apr-2005 [47] | A pair number cant be defined without impair. pair is impair +1 and impair is pair +1. So we have to define both at the same time. In logic, the negation is a function where true is false and false is true. Not and complement are native to rebol. If I try a: not 'b b: not ''a. asking the value of a, :a, does not return not b but false. Something like this does not seem to work. What I want is criss-crossed functions one defined by the other. In principle, Rebol being functionnal. It should be simple, a one liner, but I am too newbee to find the elegant way to do this. |
Ammon 12-Apr-2005 [48] | Normand, can you give us the actual code that is tripping you up here? Perhaps with a look I could help you out... |
Volker 12-Apr-2005 [49] | Normand, seems you do not define functions, but executes the expressions directly? pair: func[][impair + 1] impair: func[][pair + 1] the code makes no sense but rebol accepts it perfectly. |
Ladislav 12-Apr-2005 [50x2] | Normand: don't you mean this?: odd?: func [i] [either i = 0 [false] [even? i - 1]] even?: func [i] [either i = 0 [true] [odd? i - 1]] odd? 11 |
warning: odd? and even? are already defined in Rebol, you might prefer to use names like pair? and impair? instead like you wrote above | |
Normand 28-Apr-2005 [52x4] | Thanks for the answer. I am aiming in the direction of corecursive types, to model a category thing. So the following works. |
Co-recursive types: >> owed: func [x] [either paid? x [negate x][false]] >> owed?: func [x] [either all [integer? x negative? x] [true] [false]] >> paid: func [x] [either owed? x [negate x] [false]] >> paid?: func [x] [either all [integer? x positive? x] [true] [false]] >> a: 5 == 5 >> owed a == -5 >> owed? a == false >> owed? b: owed 5 == true >> a: paid b == 5 >> paid? a == true >> paid? paid -5 | |
Now I need custom types. | |
--Type inference from a newbee point of view: What if I wanted to form true (but un-native) datatypes ? To program them, I shall use the same method as other types in Rebol: To mention the type as its value : seasoning!: seasoning!, like the definition of the type money!: 'money. Rather, I would like to do type inference as they do, for example in ML (I adapt the example from Felleisen's LittleMLer): So I would need to define a new type and verify the type of a word with type? seasoning!: ('salt or 'pepper) Unfortunately this does not seems possible ** Script Error: Cannot use or~ on word! value ** Near: 'salt or 'pepper In Rebol: >> source integer! integer!: integer! type? 1 == integer! but natural!: (0 or natural +1) Type inference: seasoning? salt Would like the answer == seasoning is-of-type? 'salt seasoning Would like the answer == true Am I forced to turn to Ocaml to do this? I am stuck. Thanks for any help! | |
Ladislav 28-Apr-2005 [56] | I don't know exactly what you can accept and what not, but this will work: seasonings: [salt pepper] seasoning?: func [value [any-type!]] [found? find/only seasonings get/any 'value] seasoning? 'salt |
Sunanda 28-Apr-2005 [57] | As far as I know it is not possible to define new types. Not sure that would solve your problem anyway. A word can point to a value that has only *one* type (ignoring the heirarchy -- eg block! is also series!). So complex assertions about something would not be easy. Maybe rethink the need.....Use objects to hold both a value and a type: >> item: make object! [value: 'salt type: 'seasoning] >> item/type == seasoning >> 'seasoning = item/type == true You could encapsulate that in a couple of functions and expand the scope (maybe make type a block with multiple values) |
Anton 28-Apr-2005 [58x8] | Gabriele Santilli has made some custom types. I don't remember having fully understood how it works, so I can't tell you how he did it ! But it can be found here: http://www.colellachiara.com/soft/YourValues/libs/ |
custom-types.r is GPL. | |
(It's really very clever. :) | |
Just reading the code... Needs a demo. custom-types.r needs standard-actions.r | |
I'll try to make one. | |
Hmm, there seems no easy way to make a demo. Gabriele is using an include mechanism (prebol.r I think) from the SDK . But it looks like http://www.colellachiara.com/soft/YourValues/main.r is the starting point. | |
Gabriele, if you're listening, the header of http://www.colellachiara.com/soft/YourValues/yourvalues.r contains: File: %main.r ; <-- should be %yourvalues.r ?? | |
Gosh, it's too hard for me to do in any reasonable time. I suggest looking at the code to figure out the method used, then see if you can make your own custom types. | |
Gabriele 28-Apr-2005 [66x5] | Anton: the header is wrong because that file is generated with prebol using main.r |
(a version of prebol with some minor modifications.) | |
about an example: there should be a complex.r in that dir that is a bit outdated (lacks support for molding and loading) but should be a good start. also template.txt is the starting point to create a new type. | |
you need to use starred actions on them though, i.e. add* instead of add, insert* instead of insert and so on, as well as make* and to*. | |
maybe somedaye i'll have the time to finish this stuff and add docs... | |
Anton 28-Apr-2005 [71] | :) Now I think I remember I asked you that about the File: before sometime... |
Gabriele 28-Apr-2005 [72] | but, i'm not 100% sure Normand really needs this. custom types are not always the most elegant solution; actually, they are very rarely. |
Anton 28-Apr-2005 [73] | What are you up to these days anyway ? |
Gabriele 28-Apr-2005 [74x2] | also, i would really discourage a newbie from using that stuff as it is very experimental :-) |
finishing the detective version 3, then (don't know if i can say that, so i won't.) | |
older newer | first last |