YASOS-like object system based on association lists

Jason K. MacDuffie 9b78889be5 add protocol and simplify-object 6 jaren geleden
.gitignore 0fd13bd6ff add workspace to gitignore 6 jaren geleden
LICENSE de10b525c5 add readme and license 6 jaren geleden
README.md de10b525c5 add readme and license 6 jaren geleden
alsos.body.scm 9b78889be5 add protocol and simplify-object 6 jaren geleden
alsos.sld 9b78889be5 add protocol and simplify-object 6 jaren geleden

README.md

ALSOS: Association List Scheme Object System

This is an object system based on YASOS using association lists instead of disjoint objects.

Interface

(define-operation (opname self arg ...) default-body)

(define-predicate opname)

(object ((name self arg ...) body) ... )

(object-with-ancestors ( (ancestor1 init1) ...) operation ...)

;; in an operation {a.k.a. send-to-super}
(operate-as component operation self arg ...)

Example usage

> (import (macduffie alsos))
> (define-predicate instance?)
> (define-operation (instance-dispatcher obj)
    0)
> (define (make-instance dispatcher)
    (object
     ((instance? self) #t)
     ((instance-dispatcher self) dispatcher)))
> (define x (make-instance 100))
> (instance? x)
#t
> (instance-dispatcher x)
100
> (instance? "Not an instance")
#f
> (instance-dispatcher "Not an instance")
0

LICENSE: MIT (Expat) license. See LICENSE for details.