I find the amazing power of scheme in sicp
Exercise 1.4. Observe that our model of evaluation allows for combinations whose operators are compound expressions. Use this observation to describe the behavior of the following procedure:
#+BEGIN_SRC scheme
(define (a-plus-abs-b a b)
((if (> b 0) + -) a b))
(a-plus-abs-b 9 4)
#+END_SRC
#+RESULTS:
: 13
Try to rewrite it as
#+begin_src emacs-lisp :session sicp :lexical t
(defun a-plus-abs-b(a b)
((if (> b 0) + -) a b))
(a-plus-abs-b 9 4)
#+end_src
report error "invalid function"
Alternatively with
#+begin_src emacs-lisp :session sicp :lexical t
(defun a-plus-abs-b(a b)
(funcall (if (> b 0) + -) a b))
(a-plus-abs-b 9 4)
#+end_src
Error reported as
funcall: Symbol’s value as variable is void: +
How could write it correctly in elisp?