Ejercicio datatypes

#lang eopl
#|Definir las listas de tuplas

<lst-tuple> ::= '()                 empty-t-list()
                    ::= <tupla> <lst-tuple>  
                      non-empty-t-list(tu, lst)

<tupla> ::= <int> <int>  a-tuple(a,b)

lst-tuple->list: Toma una lista de tuplas retorna una lista de numeros
|#

(define-datatype lst-tuple lst-tuple?
  (empty-t-list)
  (non-empty-t-list
   (tu tupla?)
   (lst lst-tuple?)))

(define-datatype tupla tupla?
  (a-tuple
   (a integer?)
   (b integer?)))

; '( (1 2) (3 4) (5 6))
(define tupla1
  (non-empty-t-list
   (a-tuple 1 2)
   (non-empty-t-list
    (a-tuple 3 4)
    (non-empty-t-list
     (a-tuple 5 6)
     (empty-t-list)))))

;;lst-tuple->list: list of tuple -> list of number
(define lst-tuple->list
  (lambda (ltu)
    (cases lst-tuple ltu
      (empty-t-list () '())
      (non-empty-t-list (tu lst)
                        (append
                         (cases tupla tu
                           (a-tuple (a b) (list a b)))
                         (lst-tuple->list lst)
                         )
                        )
      )
    )
  )
(newline)
(display (lst-tuple->list tupla1))