In time your brain realigns, depending on how much you appreciate the functional style or not.
BEGIN
FILE F (KIND=REMOTE);
EBCDIC ARRAY E [0:11];
REPLACE E BY "HELLO WORLD!";
WHILE TRUE DO
BEGIN
WRITE (F, *, E);
END;
END.
I've heard it said that the languages you mentioned are inspired by C's syntax.C has braces to introduce a new scope. The irony is that JS (until recently) didn't have block scope. It just has braces :-).
Now this is where it gets screwy. You are supposed to (but don't have to usually) add a semi-colon on the end of each statement in Javascript.
a = 52;
This has a semi colon because it is a statement. There is another construct called an expression. An expression is anything that can evaluate to a value. An statement can be an expression (the statement "a = 52;" is an example of that because it also evaluates to 52 and is thus an expression). But there are expressions that are not statements. Here is an example of an expression
(5 * 27)
It evaluates to a value, but doesn't do anything so it is not a statement. Usually in computer languages, if "statements" are actually expressions. So you can say
if (1>0) {"Yay"} else {"Boo"}
evaluates to a value ("Yay" in this case), but doesn't do anything in and of itself. The blocks in the braces may contain statements, but the if is an expression, not a statement. Note the lack of semi-colon. Again, presumably because it is an expression, not a statement.
You can try the above in Node and it will indeed return the value "Yay".
a = if(1>0) {"Yay"} else {"Nay"};
In this case the variable a should be assigned the value "Yay", because the if expression evaluates to a "Yay". For some strange reason (that I don't understand), Javascript (or at least Node, when I tried it) does not accept that. It gives you a syntax error. You can not use if "statements" as expressions in Javascript (which sucks quite a bit).
All of this to say that Javascript appears broken to me, no matter what geneology you assign to it :-D. I personally really like programming in JS (or actually CS), but it is a beast unto itself, I think.
I'd welcome comments illuminating this issue if I've made a mistake with the above! As I said, it's easy to do.
It does indeed, and it leads to some ugly code:
a = function() { if(1>0) { return "Yay" } else { return "Nay" } }()
a = 1 > 0 ? "Yay" : "Nay"
There is a wide variety of syntax among mainstream languages, but basic function calls are pretty much all the same.
Take a look at Reason [1] for an example of how a functional language (OCaml in this case) can be made more familiar.
Some of the algorithms for reducing lambda expressions are symbolic, like, say, alpha reduction. But they are not done in lambda calculus itself, as far as I can see; they are done on lambda calculus (by the mathematician, or a machine for manipulating lambda calculus terms).
Analogy: just like ordinary algebra doesn't have symbols; but of course mathematicians work with symbols and so do computer algebra systems.
Since lambda calculus is Turing complete, it can of course represent lambda calculus manipulation (via Goedel numbering of lambda terms and then working with their arithmetic encoding as Church numerals, or whatever).
Foe example types in Ocaml usually start with lower letter.
Also Elm has "Maybe", just like Haskell, instead of "option" of Ocaml.
Also in Elm, like in Haskell you would write "List Sometype", while in Ocaml it is "sometype list".
The main issue really is that I think it's harder to read, as it's less clear what is being used where. The explicitness of the C-style makes it easier to see what goes where.