1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
;"sc4sc3.scm" Implementation of rev4 procedures for rev3.
;Copyright (C) 1991 Aubrey Jaffer
;
;Permission to copy this software, to modify it, to redistribute it,
;to distribute modified versions, 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. I have made no warranty or representation that the operation of
;this software will be error-free, and I am under no obligation to
;provide any services, by way of maintenance, update, or otherwise.
;
;3. In conjunction with products arising from the use of this
;material, there shall be no use of my name in any advertising,
;promotional, or sales literature without prior written consent in
;each case.
;;;; peek-char, number->string, and string->number need to be written here.
;;; APPEND, +, *, -, /, =, <, >, <=, >=, MAP, and FOR-EACH need to
;;; accept more general number or arguments.
(define (list? x)
(let loop ((fast x) (slow x))
(or (null? fast)
(and (pair? fast)
(let ((fast (cdr fast)))
(or (null? fast)
(and (pair? fast)
(let ((fast (cdr fast))
(slow (cdr slow)))
(and (not (eq? fast slow))
(loop fast slow))))))))))
|