Programming Language Principles Homework 07. These problems all refer to chapter 6. 1. We noted in Section 6.1.1 that most binary arithmetic operators are left-associative in most programming languages. In Section 6.1.4, however, we also noted that most compilers are free to evaluate the operands of a binary operator in either order. Are these statements contradictory? Why or why not? 2. Translate the following expression into postfix and prefix notation: [-b + sqrt(b × b - 4 × a × c)]/(2 × a) Do you need a special symbol for unary negation? 3. In Lisp, most of the arithmetic operators are de?ned to take two or more argu-ments, rather than strictly two. Thus (* 2 3 4 5) evaluates to 120, and (- 16 9 4) evaluates to 3. Show that parentheses are necessary to disambiguate arith-metic expressions in Lisp (in other words, give an example of an expression whose meaning is unclear when parentheses are removed). In Section 6.1.1 we claimed that issues of precedence and associativity do not arise with pre?x or post?x notation. Reword this claim to make explicit the hid-den assumption. 4. In Section 6.1.2 we noted that C uses = for assignment and == for equality test-ing. a) The language designers state “Since assignment is about twice as frequent as equality testing in typical C programs, it’s appropriate that the operator be half as long.”. What do you think of this rationale? b) What advantages/disadvantages are there to using ':=' as the assignment operator instead of '=' ? 5. Languages that employ a reference model of variables also tend to employ automatic garbage collection. Is this more than a coincidence? Explain.