codegeneration is cool

The expression “1+2+3” is converted to:

(list-ec
    (:list e1 (gx:. gx:unit gx-ffi:number gx:fido (gx:unit 1)))
    (:list e2
      (gx:. gx:unit gx-ffi:number gx:fido
        (list-ec
            (:list e1 (gx:. gx:unit gx-ffi:number gx:fido (gx:unit 2)))
            (:list e2 (gx:. gx:unit gx-ffi:number gx:fido (gx:unit 3)))
          (+ e1 e2))))
  (+ e1 e2))

For those who is curious and have some theoretical background:

* list-ec — list comprehension
* :list — generator of list comprehension
* gx:. — function composition
* gx:unit — wrap a value to a list
* gx:fido — take the first element from a sorted list
* gx:gx-ffi:number — convert to a number

Leave a Reply