Martial Boniou wrote: > Hi, > > I confirm. Factor deserves a look: it's a genuine combination of the > Common Lisp world (homoiconic, macros, CLOS) and the Smalltalk RAD > created by mixing Self and Forth. Plus there's concurrency support and > native code compilation. > I always liked concatenative programming I discovered 15 years ago > with HP RPN calculator and PostScript (on NeXT). I think the data > first design of stack-based languages is good for XP. For altaic > languages' speakers (korean, japanese, turkish), it's near their way > to construct sentences (like Smalltalk for SVO group). Writing > R.E.P.L. is more beautiful than writing (L (P (E (R)))) because you > don't have to look at the whole code to find out the data (near the R > here) but you start with it (you know what? before knowing how?). > (I say that but I am a bit addict to prefix ASTs by force of habit > with SBCL or Clojure.) > > > If you really wanted R.E.P.L style coding, it is possible in clojure using the -> macro (kinda neat, if you ask me). If I am not mistaken, the big difference between Forth and Factor is the presence of quotations in Factor which it inherited from Joy, I guess. Quotations, makes it possible to have something like first class functions in a stack language world.
Expressiveness-wise, the main difference I see between "conventional" languages and concatenative languages is the idea of being able to wrap a piece of code in an 'environment' of execution determined outside its immediate surrounding scope. In a conventional language you would have function parameters (in the immediate outside scope of the function) as the key way to modify the behavior of a function. In concatenative languages the argument to a quotation on a stack can be expressed differently and arguably fairly independently. Note that it might be possible to get some of the same expressiveness using a concept like clojure's "binding" and judicious use of global variables... in such a case, factor only buys you anonymous global variables potentially avoiding naming conflicts ;). pinocchio P.S. The argument about expressiveness is generally very subjective besides some glaring violations (dare I bring C++... ;) ). P.S(2). Disclaimer: haven't done any programming in stack based languages. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---