;;; -*- Scheme -*- ;;; ;;; list.xhl ;;; ;;; Simple list implementation using lambda expressions ;;; ;;; Created 980317 ;;; ;;; Authors: Magnus Ljung and Stefan Hellkvist ;; Cons ;; ;; Each node in the list is a lambda expression (define cons (lambda (f s) (lambda (w) (if (equal? w 1) f s)))) (define car (lambda (p) (p 1))) (define cdr (lambda (p) (p 2))) (define null? (lambda (o) (equal? o nil))) (define print-list (lambda (l) (define inside (lambda (l) (if (null? l) nil ((lambda () (insert (car l) (if (null? (cdr l)) "" " ")) (inside (cdr l))))))) (insert "(") (inside l) (insert ")"))) (define map (lambda (func l) (if (null? l) nil (cons (func (car l)) (map func (cdr l)))))) (define for-each (lambda (func l) (if (null? l) nil ((lambda () (func (car l)) (for-each func (cdr l))))))) (define list-ref (lambda (ls n) (if (null? ls) nil (if (equal? 0 n) (car ls) (list-ref (cdr ls) (- n 1))))))