4 ms·
I'm not sure I'd be so quick to say it's not turing complete--the language includes building functions (not first-class functions though), but it might be possi
by yossi_peti 14y ago
I'm not sure I'd be so quick to say it's not turing complete--the language includes building functions (not first-class functions though), but it might be possible that they can be used to emulate conditionals and branching.
Anyway, I'm pretty sure it wouldn't be that hard to extend the language to add some looping and branching constructs to the language, there's nothing really special there to add, it's just another simple type of construct to evaluate.
In my understanding, loops are implemented at the lowest level with jump instructions, but I've never really done much low-lever programming so maybe someone else can explain that better.
- btilly 14y agoThere is no conditional, and without a conditional you can't get a conditional. However modifying it to support conditionals is easy. Just add a built-in function if(condition, expr1, expr2). Now you can build if's. Since the language already properly supports recursive function calls, now it is possible to implement loops through recursion, and you're off and running.
- tmhedberg 14y agoIf you have function application, then you don't truly need a primitive conditional. You can represent Boolean values and conditional functions with the Church encoding [1]. This is how conditionals are represented in, for instance, the lambda calculus. [1] http://en.wikipedia.org/wiki/Church_encoding#Church_booleans http://en.wikipedia.org/wiki/Church_encoding#Church_booleans
- btilly 14y agoGood point. But you need to have first class functions for that. This toy language does not. And converting from "this native number equals that native number" to your encoding of "true" is going to be an interesting trick.
- yossi_peti 14y agoThere is a slight snag that arguments to a function are eagerly evaluated. A built-in if function would be more useful as a special form.
- anamax 14y ago> There is no conditional, and without a conditional you can't get a conditional. A two element array of function pointers (or code addresses) and an operator that turns true/false into 0/1 is enough to do conditionals.