Representacion gramaticas

Esta representación también es recursiva, pero es más poderosa que la representación inductiva ya que podemos manejar diferentes casos. Vamos a utilizar gramáticas regulares por la izquierda.

<lista> ::= <empty>
        ::= <int> <lista>
'()
'(1)
'(1 2 3)
<arbol> ::= <int>
        ::= <symbol> <arbol> <arbol>

4
'(k 3 (p 2 (f 1 2)))
<arbol-t> ::= <int>
          ::= <symbol><arbol-t> <arbol-t> <arbol-t>
7
'(k 1 2 3)
'(k (k 2 3 4) 4 (s (t 1 3 2) 2 3))
#lang eopl
#|
<arbol-t> ::= <int>
          ::= <symbol><arbol-t> <arbol-t> <arbol-t>

|#
(define arbol1 2)
(define arbol2 '(k 1 2 3))
(define arbol3 '(k (k 2 3 4) 4 (s (t 1 3 2) 2 3)))
(define ovejamala  '(2 (k 2 3 4) 4 (s (t 1 3 2) 2 3)))
;;in-A? arbol -> booleano
(define in-A?
  (lambda (arb)
    (cond
      [(number? arb)]
      [(and
        (symbol? (car arb))
        (in-A? (cadr arb))
        (in-A? (caddr arb))
        (in-A? (cadddr arb))
        )]
      [else #F])))