I'm curious how a part of Peter Norvig's Lisp interpreter works. One can define functions in this Lisp interpreter...how does this work? I'm a beginner, and just would like a simple explanation.
There's one part that might be related where it says
elif x[0] == 'define': # (define var exp)
(_, var, exp) = x
1 Answer 1
In this case, x[0] is define, x[1] is the variable name, and x[2] is the expression. So, in Python, _, var, exp = x is a "destructuring assignment", which destructures the array x into its constituent elements, and assigns them to the variables on the left-hand side.
9 Comments
(define (square x) (* x x)) ?(define (square x) (* x x)) is syntactic sugar for (define square (lambda (x) (* x x))). It's pretty obvious here that var is square and exp is (lambda (x) (* x x)).(square 5) ?lambda creates a function object. In Scheme (just like in Python, JavaScript, etc.), functions are first-class: you can pass them around like other objects. Additionally (unlike other objects), you can call them.Explore related questions
See similar questions with these tags.