From: Timothy RueTo: Jeff Kreis Subject: [REBOL] Lang. comparision plus :was>Two block questions Date: Wed, 21 Oct 98 11:29:00 I've watched as others have comparied Rebol to other programming languages. Pointing out the upside and downside of rebol. But I also note that those doing this are those who have background in other programming languages. A point worth noting if an objective of rebol is to be geared towards simplifying coding so that more can more easily learn and do, yet without constraints on Rebol applications creation complexity potential. There will always be the ability to compare one thing to other things but at what point does such a comparision become an apple vs. orange issue? My main interest in Rebol is simply this: Being that Rebol is platform independant and intended to be more geared towards human processes (easier to learn and use) than other cryptic langauges, I'm interested in using it for producing a project also intended to be platform independant. Amiga users here probably know what I'm refering to but there are other who may not. So here is the foundation. There are nine things we do in any thing we do. It is these nine things I consider in looking to what rebol offers in ability to do these nine things. 1) We start and stop (begin and finish) things. 2) We keep track of where we are in doing things. 3) We get input (make use of variables) 4) We define or select where we are getting input from. 5) We define or select where we are sending output to. 6) We do things sequencially (even in parrallel each part is sequencial) 7) We look things up (reference) and do (#6) based on what we find. 8) We identify things and do (#6) based on what we identify. 9) We put constraints on applying #7 and #8 in order to focus our intent or objective and reduce the time it takes get to doing #6. I could elaborate more on these, giving many examples.... (I.E. why #2? because we often get distracted in what we are doing, or otherwise have to put on hold what we are doing in order to do someting else first, only to need to remember where we left off in order to pick up where we left off.) ....but I'm sure doing so could make for a long post. Over the many years from when I first identified these nine, I have looked into many things and methods of programming (AI, NLP, OOP, Constraint programming, etc..). But I didn't look into these things to see how I might apply the nine, but rather to see if I could find the nine (or makings of) in such a way that I could easily apply them, integrate them into a simple yet specific configuration. Also over these years I have had to deal with individuals making comparisions based on their mindset (*) interpreted perception of this configuration. (*) mindset -> that which is the current thought tools and interest of individuals. In trying to explain the problem here, lets say you have the complete yet basic tool set by which you can create anything. Thru the use of this tool set you create any number of things, different and or similiar things, it does not matter. Now you have all these things you've created thru the use of this tool set that many others have made great use of, and they fully understand these creations. But then what happens when you now try to explain, tell them about this complete yet basic tool set? We tend to relate something new to that which we already understand. Actually there is a word for this and it's a bit more than just a "we tend to" option but rather a required part of learning. Anyway.... The problem is this: you cannot describe such a tool set used to create things, in terms of these created things. It's like trying to describe the tools of a carpenter using the description of a house. There is a second problem: when the product itself contains elements of the tool set, the distinction between the tool set and the product becomes even more difficult. Lets' say you have the primary genetic base elements for human life of which you can create and put together genetic code parts that make up unique individuals. Now try and use the genetic code of any given number of individual to explain or define the primary base elements. The problem is that of trying to identify primary elements from an incomplete list (potential) of created code parts. Such an incomplete list that prevents you from correctly identifying the primary elements of genetic code creation. Is there something more fundamental in the tool set of rebol by which we have usability of rebols builtin vocabulary? I don't know. But I do know that there is this ability of users to use rebol to create additional vocabulary and that there is the todo list of what rebols vocabulary will have added to it. So, how does rebol, it's vocabulary tool set, currently fit or allow us to apply any or all of the nine identified things we do? (This question is not in reference to the configuration of the nine but only as nine separate things.) We have start and stop (begin, finish) abilities (#1) *Do we have a way to keep track of where we are? (#2?) We have a way to get input (#3) We have a way to define/select where we are getting input from (#4) We have a way to define/select where we are sending output to (#5) *Do we have sequencial control in doing things? (#6?) *Do we have ability to look things up (#7?) and do (#6?) based on what we find? We can identify things (#8) and do (#6?) base on what we identify thru datatype query. We can put constraints (#9) on what we look up (#7?) and identify (#8) Thru dialects. What are the limitations of Rebol in doing these individual things (**) and doing them easily? ** Note that #2 is not independant in the respect that it would keep track of where the other eight are (or at least the information relative to applying them.) --- *3 S.E.A.S - Virtual Interaction Configuration (VIC) - VISION OF VISIONS!* *~ ~ ~ Advancing How we Perceive and Use the Tool of Computers!* Timothy Rue What's *DONE* in all we do? *AI PK OI IP OP SF IQ ID KE* Email @ mailto:timrue@mindspring.com >INPUT->(Processing)->OUTPUT>v Web @ http://www.mindspring.com/~timrue/ ^<--------<----9----<--------< ========================================================================= From: Jrm To: rebol-userlist Subject: Re: [REBOL] Lang. comparision plus :was>Two block questions Date: Wed, 21 Oct 98 13:30:00 Tim, I was in a rather foul mood this morning and blew off your question, but on reconsideration I think it deserves a well-thought out answer. I apologize for my rudeness. Insofar as REBOL's capability to do everything that you describe, rest assured that it can indeed. REBOL isomorphic to Church's Lambda calculus. The way functions are implemented is designed to follow the substitution rules of Lambda calculus. You could try out many of Church's examples by using the FUNC function instead of lambda and single arguments functions. Church and Rosser proved that Turing's concept of `effectively computable functions', and Church's `lambda calculus', and `recursively enumerable functions' were, in reality, different aspects of the same thing. They went on to show that all algorithmically computable functions are members of this set. Therefore, any computation model as powerful as a Turing machine, or isomorphic to LAMBDA calculus, is no more or less powerful as any other. However, this doesn't address the issue of convenience, which you raise. >So, how does rebol, it's vocabulary tool set, currently fit or allow us to >apply any or all of the nine identified things we do? (This question is >not in reference to the configuration of the nine but only as nine >separate things.) > >We have start and stop (begin, finish) abilities (#1) REBOL starts from the command line and stops with the quit command. Furthermore individual rebol commands can be run from the command line. >*Do we have a way to keep track of where we are? (#2?) This will improve. REBOL, of course, keeps track of where it is, but this internal state is not always readily available to the user. (Except via catch-func. But catch-func returns an opaque object, that is not very enlightening). >We have a way to get input (#3) Input function, read from files. >We have a way to define/select where we are getting input from (#4) Argument to read. >We have a way to define/select where we are sending output to (#5) Argument to send. >*Do we have sequencial control in doing things? (#6?) This is implied by sequential execution. Additionally, you can use the any, all, and reduce functions to sequentially evaluate a block. >*Do we have ability to look things up (#7?) and do (#6?) based on what > we find? You can extend blocks or objects and use select to look things up. You can use a conditional statement or `do' based on what is found. >We can identify things (#8) and do (#6?) base on what we identify thru > datatype query. The type? command returns a symbol representing a datatype. This can be dispatched upon. I hope this is of help to you. ~jrm ========================================================================== From: Jrm To: rebol-userlist Subject: Re: [REBOL] Lang. comparision plus :was>Two block questions Date: Wed, 21 Oct 98 21:29:00 Thanks for the clarifications. It's been a while since I've read Church, Rosser, etc. What I was getting at is that once you show that your computer language is at least as powerful as a Turing machine, or can reduce lambda expressions (fairly simple criteria), you have shown that your computer language is at least as powerful (in an abstract sense) as any other language. So in one sense, REBOL satisfies any abstract criteria for powerfulness as any other Turing complete computer language. In a more concrete sense, though, we still have a lot of work to do. What this says is that the limitations of REBOL are simply in the lack of a complete implementation of the native functions rather than in a theoretical intractability we may have overlooked. ~jrm -----Original Message----- From: Tim Peters To: rebol-userlist@lists.rebol.com Date: Wednesday, October 21, 1998 7:11 PM Subject: RE: [REBOL] Lang. comparision plus :was>Two block questions >> ... >> Church and Rosser proved that Turing's concept of `effectively >> computable functions', and Church's `lambda calculus', and >> `recursively enumerable functions' were, in reality, different >> aspects of the same thing. They went on to show that all >> algorithmically computable functions are members of this set. > >Not that it adds anything of value to this discussion <0.9 wink>, but the >techie details in that exposition are off. The two main Church-Rosser >theorems weren't concerned with computability per se, but with establishing >that (theorem 1) if a normal form for a lambda expression exists, it's >unique; and (theorem 2) there is an effective algorithm for finding a lambda >expression's normal form (if one exists -- determining *whether* one exists >is much harder ("the halting problem")). Those lovely results are the >theoretical underpinnings of all languages in the Lisp tree, REBOL included. > >Proving the equivalence of various notions of computability was really more >of a worldwide obsession in the late 1930's, and many people were involved >(notably Kleene, and Turing himself). > >At the end of this chain, Church's Thesis (often called the Church-Turing >Thesis, but never Church-Rosser) is that, *whatever* we think we mean by >"effectively computable", it's captured by the formal notion of "partial >recursive functions" (or Turing machines, or any of the other formal notions >that have been proved equivalent to it). > >It's called "a thesis" instead of "a theorem" because it makes an unprovable >claim: "effectively computable" is an *intuitive* notion, and so not >subject to formal manipulation. Church's Thesis is simply that every time >you do try to formalize it, no matter how clever you are you'll end up with >a system provably equivalent to partial recursive functions (= Turing >machines = Post productions = etc etc). > >To the small extent that it's argued against at all today, Church's Thesis >is faulted on the grounds that partial recursive functions may be *more* >powerful than "what we think we mean" by effectively computable. > >All that out of that way, no computer constrained by finite memory is as >powerful as a Turing machine -- but nobody cares since that's just a detail >(if computers had unbounded memory, "the problem" would go away). > >So, ignoring that bit of irksome reality, REBOL is certainly as strong as a >Turing machine. But so are almost all other programming languages, from >Fortran to Perl -- the whole point of Turing's construction was that even a >*very* feeble "machine" could be proved as theoretically powerful as the >most elaborate consructions that came before his. So, after slogging thru >all the above , you're left with: (a) yes, practically speaking REBOL >is Turing-complete; and, (b) but so is everything else. > >It's a wonderful field of study, especially for the sheer quantity of deep & >beautiful results (like this one!) that nevertheless have few practical >implications. For anyone interested in pursuing it, I highly recommend >Hartley Rogers Jr.'s "Theory of Recursive Functions and Effective >Computability" (MIT Press, 1988). Look for it in a library, though: it's >"the bible" in this field, and after an excellent intro goes into way more >deep detail than you're likely to want to keep around the house . > >i-had-it-as-a-text-once-and-that's-my-only-excuse-ly y'rs - tim > > >