• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
      • Theories
      • Rule-classes
      • Proof-builder
      • Recursion-and-induction
      • Hons-and-memoization
      • Events
      • Parallelism
      • History
      • Programming
      • Operational-semantics
      • Real
      • Start-here
      • Debugging
      • Miscellaneous
      • Output-controls
      • Macros
      • Interfacing-tools
        • Io
        • Defttag
        • Sys-call
        • Save-exec
        • Quicklisp
        • Std/io
        • Oslib
        • Bridge
          • Json-encoding
            • Json-encode-main
            • Json-encode-weird-char
            • Json-encode-atom
              • Json-encode
              • Json-encode-chars
              • Json-encode-char
              • Json-encode-str
              • Json-simple-alist-p
              • Json-comma-and-maybe-newline
            • Security
            • Command
            • In-main-thread
            • Message
            • Start
            • Bindings
            • Stop
            • Try-in-main-thread
          • Clex
          • Tshell
          • Unsound-eval
          • Hacker
          • ACL2s-interface
          • Startup-banner
          • Command-line
      • Interfacing-tools
        • Io
        • Defttag
        • Sys-call
        • Save-exec
        • Quicklisp
        • Std/io
        • Oslib
        • Bridge
          • Json-encoding
            • Json-encode-main
            • Json-encode-weird-char
            • Json-encode-atom
              • Json-encode
              • Json-encode-chars
              • Json-encode-char
              • Json-encode-str
              • Json-simple-alist-p
              • Json-comma-and-maybe-newline
            • Security
            • Command
            • In-main-thread
            • Message
            • Start
            • Bindings
            • Stop
            • Try-in-main-thread
          • Clex
          • Tshell
          • Unsound-eval
          • Hacker
          • ACL2s-interface
          • Startup-banner
          • Command-line
        • Hardware-verification
        • Software-verification
        • Math
        • Testing-utilities
      • Json-encoding

      Json-encode-atom

      Signature
      (json-encode-atom x acc) → new-acc
      Arguments
      x — Guard (atom x).
      Returns
      new-acc — Type (character-listp new-acc), given (character-listp acc).

      Definitions and Theorems

      Function: json-encode-atom

      (defun json-encode-atom (x acc)
       (declare (xargs :guard (atom x)))
       (let ((__function__ 'json-encode-atom))
        (declare (ignorable __function__))
        (let*
         ((acc (cons #\" acc))
          (acc
            (cond ((symbolp x)
                   (json-encode-str (symbol-name x)
                                    (if (keywordp x) (cons #\: acc) acc)))
                  ((integerp x)
                   (if (< x 0)
                       (revappend (str::nat-to-dec-chars (- x))
                                  (cons #\- acc))
                     (revappend (str::nat-to-dec-chars x)
                                acc)))
                  ((characterp x)
                   (json-encode-char x acc))
                  ((stringp x) (json-encode-str x acc))
                  ((acl2-numberp x)
                   (json-encode-chars (explode-atom x 10)
                                      acc))
                  (t (progn$ (raise "Bad ACL2 object: ~x0" x)
                             acc)))))
         (cons #\" acc))))

      Theorem: character-listp-of-json-encode-atom

      (defthm character-listp-of-json-encode-atom
        (implies (character-listp acc)
                 (b* ((new-acc (json-encode-atom x acc)))
                   (character-listp new-acc)))
        :rule-classes :rewrite)