How is a primitive procedure tagged in SICP's evaluator (chapter 4)?


How is a primitive procedure tagged in SICP's evaluator (chapter 4)?



I am reading chapter 4 of SICP. In the eval procedure, there is a procedure application. This procedure checks whether the expression is tagged with the symbol 'primitive or 'procedure.


eval


application


'primitive


'procedure



I can see where the symbol 'procedure is added. (It is when evaluating a lambda expression.).


'procedure



I am not able to find where the tag 'primitive is added? Clearly, when I supply a program to the evaluator, I supply (+ 1 2) and not ('primitive + 1 2). I would guess the 'primitive tag is added somewhere (like 'procedure), but I cannot find where.


'primitive


(+ 1 2)


('primitive + 1 2)


'primitive


'procedure




1 Answer
1



Take a look at the primitive-procedure-objects procedure, that's where the 'primitive tag is added to the elements of the primitive-procedures list, which contains the primitive operations available to the interpreter.


primitive-procedure-objects


'primitive


primitive-procedures



In turn, primitive-procedure-objects is called inside setup-environment, which is used for creating the initial environment for the interpreter.


primitive-procedure-objects


setup-environment



When evaluating an expression such as (+ 1 2), the evaluator simply goes all the way down in the case analysis of eval, matching the application? predicate, which invokes apply and then (eval (operator exp) env) on the first element of the expression. In turn, this matches variable? in the case analysis, which calls lookup-variable-value, that returns a procedure, which we tagged with 'primitive in setup-environment. Whew!


(+ 1 2)


eval


application?


apply


(eval (operator exp) env)


variable?


lookup-variable-value


'primitive


setup-environment





Yes, I have seen that. But, how is it "reached" from eval. I mean, if I supply (+ 1 2) to the evaluator, how does it end up being seen as a primitive-procedure? if there is no 'primitive tag in what I supplied to the evaluator?
– Gradient
Jul 2 at 19:42



eval


(+ 1 2)


primitive-procedure?


'primitive





@Gradient there you go :)
– Óscar López
Jul 2 at 19:55





That is what I was looking for! Thank you!
– Gradient
Jul 2 at 19:56






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

api-platform.com Unable to generate an IRI for the item of type

How to set up datasource with Spring for HikariCP?

Display dokan vendor name on Woocommerce single product pages