scheme shell
about
download
support
resources
docu
links
 
scsh.net

Insert Condition Definition

Generate scheme code for a SRFI-35 "define-condition-type" definition. Asks for the name of the condition, name of the parent and a list of fields.

-Eric

 ;; generate SRFI-35 condition definitions
 (defun read-field-names ()
   ""
   (let ((field (read-string "Field: ")))
     (if (string= field "")
         '()
         (cons field (read-field-names)))))

(defun prepend-ampersand (str) (cond ((= (length str) 0) str) ((char-equal ?& (aref str 0)) str) (t (concat "&" str))))

(defun strip-ampersand (str) (cond ((= (length str) 0) str) ((char-equal ?& (aref str 0)) (apply 'string (cdr (string-to-list str)))) (t str)))

(defun make-condition-field-accessor-name (condition field) (concat condition "-" field))

(defun build-define-condition-type (name parent fields) (concat "(define-condition-type " (prepend-ampersand name) " " (prepend-ampersand parent) "\n" (strip-ampersand name) "?" (apply 'concat (mapcar (lambda (field) (concat "\n(" field " " (make-condition-field-accessor-name (strip-ampersand name) field) ")")) fields)) ")\n"))

(defun insert-condition-definition (name) "Insert a Scheme code for a SRFI-35 condition definition" (interactive "sCondition name: ")

(let* ((parent (read-string "Parent: "))) (let ((parent (if (string= parent "") nil parent)) (fields (read-field-names))) (save-excursion (insert-string (build-define-condition-type name parent fields))))))


InsertConditionDefinition - raw wiki source | code snippets archive