lang/acl2-app.ss
#lang scheme

(provide (rename-out [acl2-app #%app]))

(require (for-syntax "syntax-checks.ss")
         (for-template scheme/base))

(define-syntax (acl2-app stx)
  (syntax-case stx (unbox)
    [(_) (syntax/loc stx '())]
    [(_ (unbox id) args ...)
     (syntax/loc stx (#%app (unbox id) args ...))]
    [(_ id args ...)
     (and (identifier? #'id) (not (legal-constant-name? #'id)))
     (syntax/loc stx (#%app id args ...))]
    [(_ id args ...)
     (legal-constant-name? #'id)
     (raise-syntax-error #f
       "This is a constant name, but we expected a function name." stx #'id)]
    [(_ something args ...)
     (raise-syntax-error #f
       "Expected the name of a function here" stx #'something)]))