Define-Record-Type

(define-record-type type-name constructor predicate field-spec ...)

Defines a new record type, similar to "SRFI-9: Defining Record Types." The type is constructed using make-tag, and each instance of the record is backed by a vectors, enclosed within a cell.

examples/point.ms

(import "lib/record")

;; Define a new type, <point>
(define-record-type point
                    (make-point x y)
                    point?
                    (x point-x set-point-x!)
                    (y point-y set-point-y!))

;; A simple function that formats <point>s.
(define (format-point p))
  (string-append "[x: "
                 (format (point-x x))
                 " y: "
                 (format (point-y y))
                 "]"))

Using point.ms From the REPL

>> (load "examples/point.ms")

>> (define pt (make-point 111 222))

>> (format-point pt)
:: "[x: 111 y: 222]"

>> (set-point-x! pt "foo")
>> (format-point pt)
:: "[x: \"foo\" y: 222]"