SchemeDoc をちょっと拡張

ドキュメントを定義するだけのフォームを認識するように、schemedoc-extractor.scm を拡張。
define-doc を追加しました。

何がうれしいか?

処理系内部に C++ で実装された Scheme 手続きのドキュメントを *.scm なファイルに書けるようになります。

; define-doc は何もしない
(define-macro (define-doc . more)
  `())

; ドキュメントを書く
;; Return the first sublist of list whose car satisfies a given condition, where the sublists of lists are the lists returned by (list-tail list k) for k less than the length of list.
;; .form (memq obj list)
;; .pre-condition Proc should accept one argument and return a single value. Proc should not mutate list.
;; .returns The first sublist of list whose car satisfies a given condition, where the sublists of lists are the lists returned by (list-tail list k) for k less than the length of list.
(define-doc (memq) ...)

変更ソース

; return whether form is a define form:
(define (define-form-scheme-doc? form)
  (and (list? form) (> (length form) 1) (or (eq? (car form) 'define)  (eq? (car form) 'define-syntax) (eq? (car form) 'define-doc))))

; Return the signature (a list) of define-form.
; Define form is supposed to be a proper list which satisfies the predicate define-form-scheme-doc?
(define (signature-of-define-form define-form)
  (cond ((and (eq? (first define-form) 'define) (pair? (second define-form))) (cadr define-form))
        ((and (eq? (first define-form) 'define) (symbol? (second define-form)))
           (if (lambda-form? (third define-form))
               (cons (second define-form) (second (third define-form)))
               (second define-form)))
        ((eq? (first define-form) 'define-syntax)
           (second define-form))
        ((eq? (first define-form) 'define-doc)
           (second define-form))
        (else (laml-error "signature-of-define-form: Unknown composition of define-form:" define-form))))