As I mentioned in class, the presence of macros in the lisp family of languages
ID: 3811391 • Letter: A
Question
As I mentioned in class, the presence of macros in the lisp family of languages has led to many subtly-different implementations of the same concept. Just as function definition isn't a fundamental operation (it is composed of definition and lambda), the let mechanism can be constructed from lambdaalone. The Clojure code
(let [x 10, y 20] (* x y))
is equivalent to
((fn [x y] (+ x y)) 10 20). Thus, many different implementations exist (In fact, some of the differences in let forms have been cited in the renaming of PLT Scheme to Racket (https://racket-lang.org/new-name.html)
Let's help make schemers more at home in Clojure with a macro that allows scheme-style macros to be used.
Rather than try to support both syntaxes from a single macro, you'll define a new one such that
(let-scm ((x 10) (y 20)) (+ x y))
is the same thing as
(let [x 10 y 20] (+ x y))
Explanation / Answer
Macros
Macros allows to redefine the synxtax, create new language constructs, expand the language and create DSL - Domain Specific Languages.
Note: all the macros bellow were tested on GNU GUILE that was started with the command:
increment a variable
>
Swap two variables
Convert Infix Operator to prefix operator
Invert Predicate
scm ((x 10) (y 20)) (+ x y)) is same thing as ([x 10 y 20] (+ x y))
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.