summaryrefslogtreecommitdiff
path: root/ice-9/safe-r5rs.scm
blob: 9f36feb3590af83b81fae441d4ae9d6b321c089a (plain)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
;;;; 	Copyright (C) 2000 Free Software Foundation, Inc.
;;;; 
;;;; This program is free software; you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;;; the Free Software Foundation; either version 2, or (at your option)
;;;; any later version.
;;;; 
;;;; This program is distributed in the hope that it will be useful,
;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;;; GNU General Public License for more details.
;;;; 
;;;; You should have received a copy of the GNU General Public License
;;;; along with this software; see the file COPYING.  If not, write to
;;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
;;;; Boston, MA 02111-1307 USA
;;;; 

;;;; Safe subset of R5RS bindings

(define-module (ice-9 safe-r5rs))

(define null-interface (resolve-interface '(ice-9 null)))

(module-use! %module-public-interface null-interface)

(export eqv? eq? equal?
	number?	complex? real? rational? integer?
	exact? inexact?
	= < > <= >=
	zero? positive?	negative? odd? even?
	max min
	+ * - /
	abs
	quotient remainder modulo
	gcd lcm
	numerator denominator
	floor ceiling truncate round
	rationalize
	exp log sin cos tan asin acos atan
	sqrt
	expt
	make-rectangualr make-polar real-part imag-part magnitude angle
	exact->inexact inexact->exact

	number->string string->number

	boolean?
	not

	pair?
	cons car cdr
	set-car! set-cdr!
	caar cadr cdar cddr
	caaar caadr cadar caddr cdaar cdadr cddar cdddr
	caaaar caaadr caadar caaddr cadaar cadadr caddar cadddr
	cdaaar cdaadr cdadar cdaddr cddaar cddadr cdddar cddddr
	null?
	list?
	list
	length
	append
	reverse
	list-tail list-ref
	memq memv member
	assq assv assoc
	
	symbol?
	symbol->string string->symbol

	char?
	char=? char<? char>? char<=? char>=?
	char-ci=? char-ci<? char-ci>? char-ci<=? char-ci>=?
	char-alphabetic? char-numeric? char-whitespace?
	char-upper-case? char-lower-case?
	char->integer integer->char
	char-upcase
	char-downcase

	string?
	make-string
	string
	string-length
	string-ref string-set!
	string=? string-ci=?
	string<? string>? string<=? string>=?
	string-ci<? string-ci>? string-ci<=? string-ci>=?
	substring
	string-length
	string-append
	string->list list->string
	string-copy string-fill!

	vector?
	make-vector
	vector
	vector-length
	vector-ref vector-set!
	vector->list list->vector
	vector-fill!

	procedure?
	apply
	map
	for-each
	force
	
	call-with-current-continuation

	values
	call-with-values
	dynamic-wind

	eval
	null-environment

	input-port? output-port?
	current-input-port current-output-port

	read
	read-char
	peek-char
	eof-object?
	char-ready?

	write
	display
	newline
	write-char

	;;transcript-on
	;;transcript-off
	)

(define (null-environment n)
  (if (not (= n 5))
      (scm-error 'misc-error 'null-environment
		 "~A is not a valid version"
		 (list n)
		 '()))
  ;; Note that we need to create a *fresh* interface
  (let ((interface (make-module 31)))
    (set-module-kind! interface 'interface)
    (module-use! interface null-interface)
    interface))