|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 6586 (0x19ba) Types: TextFile Names: »sdata.scm.30«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/gnu-31mar87/scheme/scm/sdata.scm.30«
;;; -*-Scheme-*- ;;; ;;; Copyright (c) 1984 Massachusetts Institute of Technology ;;; ;;; This material was developed by the Scheme project at the ;;; Massachusetts Institute of Technology, Department of ;;; Electrical Engineering and Computer Science. Permission to ;;; copy this software, to redistribute it, and to use it for any ;;; purpose is granted, subject to the following restrictions and ;;; understandings. ;;; ;;; 1. Any copy made of this software must include this copyright ;;; notice in full. ;;; ;;; 2. Users of this software agree to make their best efforts (a) ;;; to return to the MIT Scheme project any improvements or ;;; extensions that they make, so that these may be included in ;;; future releases; and (b) to inform MIT of noteworthy uses of ;;; this software. ;;; ;;; 3. All materials developed as a consequence of the use of ;;; this software shall duly acknowledge such use, in accordance ;;; with the usual standards of acknowledging credit in academic ;;; research. ;;; ;;; 4. MIT has made no warrantee or representation that the ;;; operation of this software will be error-free, and MIT is ;;; under no obligation to provide any services, by way of ;;; maintenance, update, or otherwise. ;;; ;;; 5. In conjunction with products arising from the use of this ;;; material, there shall be no use of the name of the ;;; Massachusetts Institute of Technology nor of any adaptation ;;; thereof in any advertising, promotional, or sales literature ;;; without prior written consent from MIT in each case. ;;; ;;;; Abstract Data Field (declare (usual-integrations)) \f (define unbound-object?) (define make-unbound-object) (define unassigned-object?) (define make-unassigned-object) (define &typed-singleton-cons) (define &singleton-element) (define &singleton-set-element!) (define &typed-pair-cons) (define &pair-car) (define &pair-set-car!) (define &pair-cdr) (define &pair-set-cdr!) (define &typed-triple-cons) (define &triple-first) (define &triple-set-first!) (define &triple-second) (define &triple-set-second!) (define &triple-third) (define &triple-set-third!) (define &typed-vector-cons) (define &list-to-vector) (define &vector-size) (define &vector-ref) (define &vector-to-list) (define &subvector-to-list) \f (let ((&unbound-object '(&UNBOUND-OBJECT)) (&unassigned-object '(&UNASSIGNED-OBJECT)) (&unassigned-type (microcode-type 'UNASSIGNED)) (hunk3-cons (make-primitive-procedure 'HUNK3-CONS))) (define (map-unassigned object) (if (eq? object &unbound-object) (primitive-set-type &unassigned-type 1) (if (eq? object &unassigned-object) (primitive-set-type &unassigned-type 0) object))) (define (map-from-unassigned datum) (if (eq? datum 0) ;**** cheat for speed. &unassigned-object &unbound-object)) (define (map-unassigned-list list) (if (null? list) '() (cons (map-unassigned (car list)) (map-unassigned-list (cdr list))))) (set! make-unbound-object (lambda () &unbound-object)) (set! unbound-object? (lambda (object) (eq? object &unbound-object))) (set! make-unassigned-object (lambda () &unassigned-object)) (set! unassigned-object? (lambda (object) (eq? object &unassigned-object))) (set! &typed-singleton-cons (lambda (type element) (system-pair-cons type (map-unassigned element) #!NULL))) (set! &singleton-element (lambda (singleton) (if (primitive-type? &unassigned-type (system-pair-car singleton)) (map-from-unassigned (primitive-datum (system-pair-car singleton))) (system-pair-car singleton)))) (set! &singleton-set-element! (lambda (singleton new-element) (system-pair-set-car! singleton (map-unassigned new-element)))) \f (set! &typed-pair-cons (lambda (type car cdr) (system-pair-cons type (map-unassigned car) (map-unassigned cdr)))) (set! &pair-car (lambda (pair) (if (primitive-type? &unassigned-type (system-pair-car pair)) (map-from-unassigned (primitive-datum (system-pair-car pair))) (system-pair-car pair)))) (set! &pair-set-car! (lambda (pair new-car) (system-pair-set-car! pair (map-unassigned new-car)))) (set! &pair-cdr (lambda (pair) (if (primitive-type? &unassigned-type (system-pair-cdr pair)) (map-from-unassigned (primitive-datum (system-pair-cdr pair))) (system-pair-cdr pair)))) (set! &pair-set-cdr! (lambda (pair new-cdr) (system-pair-set-cdr! pair (map-unassigned new-cdr)))) (set! &typed-triple-cons (lambda (type first second third) (primitive-set-type type (hunk3-cons (map-unassigned first) (map-unassigned second) (map-unassigned third))))) (set! &triple-first (lambda (triple) (if (primitive-type? &unassigned-type (system-hunk3-cxr0 triple)) (map-from-unassigned (primitive-datum (system-hunk3-cxr0 triple))) (system-hunk3-cxr0 triple)))) (set! &triple-set-first! (lambda (triple new-first) (system-hunk3-set-cxr0! triple (map-unassigned new-first)))) (set! &triple-second (lambda (triple) (if (primitive-type? &unassigned-type (system-hunk3-cxr1 triple)) (map-from-unassigned (primitive-datum (system-hunk3-cxr1 triple))) (system-hunk3-cxr1 triple)))) (set! &triple-set-second! (lambda (triple new-second) (system-hunk3-set-cxr0! triple (map-unassigned new-second)))) (set! &triple-third (lambda (triple) (if (primitive-type? &unassigned-type (system-hunk3-cxr2 triple)) (map-from-unassigned (primitive-datum (system-hunk3-cxr2 triple))) (system-hunk3-cxr2 triple)))) (set! &triple-set-third! (lambda (triple new-third) (system-hunk3-set-cxr0! triple (map-unassigned new-third)))) \f (set! &typed-vector-cons (lambda (type elements) (system-list-to-vector type (map-unassigned-list elements)))) (set! &list-to-vector list->vector) (set! &vector-size system-vector-size) (set! &vector-ref (lambda (vector index) (if (primitive-type? &unassigned-type (system-vector-ref vector index)) (map-from-unassigned (primitive-datum (system-vector-ref vector index))) (system-vector-ref vector index)))) (set! &vector-to-list (lambda (vector) (&subvector-to-list vector 0 (system-vector-size vector)))) (set! &subvector-to-list (lambda (vector start stop) (let loop ((sublist (system-subvector-to-list vector start stop))) (if (null? sublist) '() (cons (if (primitive-type? &unassigned-type (car sublist)) (map-from-unassigned (primitive-datum (car sublist))) (car sublist)) (loop (cdr sublist))))))) )