So I have been reading the awesome SICP book for some time now and the striking thing is the resemblance between JS and Scheme in some areas. Not surprising considering that Scheme was one of the major influences for the JS language. Thus, another reason to learn more languages to become a better programmer.
1. begin and comma operators
Scheme has the begin operator which allows you to evaluate a series of expressions and return the value of the last evaluated expression. This immediately struck me as being related to the JS comma operator which does exactly the same thing!
Code Samples
//JS
var x = 1,2,3,4,5;
x; //5
//Scheme
(define a
(begin 1 2 3 4 5))
a; 5
[/code]
One difference though is the fact that I find begin more useful in Scheme than its JS comma counterpart.
2. Type coercion
Due to JavaScript’s loose typing and implicit coercion, values can be truthy or falsy (e.g. undefined, null or 0). Idiomatic JavaScript leverages this coercion into false values and that’s why you see expressions like the below:
if(value) {
console.log("Value is truthy!);
}
Scheme behaves in a similar way too – values are coerced albeit with more rigidity than JS.
(if null
(display "Null coerced to true!")
)
; Null coerced to true!
3. Lambdas, first-class functions, closures and maybe lexical Scope
Some say JavaScript helped fuel the widespread adoption of lambdas in mainstream languages. It made people see the value of the hidden gem which hitherto had been languishing in the murky depths of academia.
Scheme and JavaScript do share first-class functions support, closures and lambdas. Although there is no lambda keyword in JS, anonymous functions essentially do the exact same thing. The introduction of let in ES6 should bring JS to par with Scheme’s let
And that’s about it for now.
One thought on “JS and Scheme, the similarities”