#lang racket ;;; BNF of LON: ;;; ::= () ;;; ::= ( . ) (define lon? (lambda (l) (cond [(null? l)] [(pair? l) (and (number? (car l)) (lon? (cdr l)))] [else #f]))) ;;; BNF of (simple) expression: ;;; ::= ;;; ::= (lambda () ) ;;; ::= ( ) (define expression? (lambda (exp) (cond [(symbol? exp)] [(pair? exp) (if (eq? (car exp) 'lambda) (and (pair? (cadr exp)) (symbol? (caadr exp)) (expression? (caddr exp))) (and (expression? (car exp)) (expression? (cadr exp))))] [else #f])))