/usr/share/guile/3.0/ice-9
NameSizeModeActions
peg/-0755rm
and-let-star.scm25930644editdlrm
arrays.scm26920644editdlrm
atomic.scm15920644editdlrm
binary-ports.scm27730644editdlrm
boot-9.scm1704130644editdlrm
buffered-input.scm49350644editdlrm
calling.scm107900644editdlrm
command-line.scm190500644editdlrm
common-list.scm91600644editdlrm
control.scm41810644editdlrm
copy-tree.scm31190644editdlrm
curried-definitions.scm18290644editdlrm
deprecated.scm15730644editdlrm
documentation.scm75840644editdlrm
eval-string.scm30580644editdlrm
eval.scm256770644editdlrm
exceptions.scm147300644editdlrm
expect.scm56280644editdlrm
fdes-finalizers.scm10840644editdlrm
format.scm670380644editdlrm
ftw.scm256660644editdlrm
futures.scm107390644editdlrm
gap-buffer.scm98250644editdlrm
getopt-long.scm168880644editdlrm
hash-table.scm18130644editdlrm
hcons.scm26140644editdlrm
history.scm23430644editdlrm
i18n.scm210020644editdlrm
iconv.scm32680644editdlrm
lineio.scm39410644editdlrm
list.scm13190644editdlrm
local-eval.scm100720644editdlrm
ls.scm32750644editdlrm
match.scm22330644editdlrm
match.upstream.scm367970644editdlrm
networking.scm34070644editdlrm
null.scm12390644editdlrm
occam-channel.scm74360644editdlrm
optargs.scm161230644editdlrm
peg.scm16840644editdlrm
poe.scm33820644editdlrm
poll.scm59290644editdlrm
popen.scm94900644editdlrm
ports.scm195350644editdlrm
posix.scm27930644editdlrm
pretty-print.scm172890644editdlrm
psyntax-pp.scm1872710644editdlrm
psyntax.scm1525420644editdlrm
q.scm42970644editdlrm
quasisyntax.scm53480644editdlrm
r5rs.scm16020644editdlrm
r6rs-libraries.scm106330644editdlrm
r7rs-libraries.scm43870644editdlrm
rdelim.scm79020644editdlrm
read.scm333010644editdlrm
readline.scm97910644editdlrm
receive.scm10820644editdlrm
regex.scm90840644editdlrm
runq.scm83790644editdlrm
rw.scm10470644editdlrm
safe-r5rs.scm76760644editdlrm
safe.scm12790644editdlrm
sandbox.scm350620644editdlrm
save-stack.scm21980644editdlrm
scm-style-repl.scm119000644editdlrm
serialize.scm38690644editdlrm
session.scm181460644editdlrm
slib.scm15830644editdlrm
stack-catch.scm19830644editdlrm
streams.scm60040644editdlrm
string-fun.scm99160644editdlrm
suspendable-ports.scm305760644editdlrm
textual-ports.scm23460644editdlrm
threads.scm128390644editdlrm
time.scm21210644editdlrm
top-repl.scm26950644editdlrm
unicode.scm10050644editdlrm
vlist.scm220810644editdlrm
weak-vector.scm12290644editdlrm
Edit: /usr/share/guile/3.0/ice-9/safe-r5rs.scm (7676B)
;;;; Copyright (C) 2000-2001,2004,2006,2008-2010,2019 ;;;; Free Software Foundation, Inc. ;;;; ;;;; This library is free software; you can redistribute it and/or ;;;; modify it under the terms of the GNU Lesser General Public ;;;; License as published by the Free Software Foundation; either ;;;; version 3 of the License, or (at your option) any later version. ;;;; ;;;; This library 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 ;;;; Lesser General Public License for more details. ;;;; ;;;; You should have received a copy of the GNU Lesser General Public ;;;; License along with this library; if not, write to the Free Software ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;;;; ;;;; Safe subset of R5RS bindings (define-module (ice-9 safe-r5rs) #:pure #:use-module ((guile) #:hide (case cond syntax-rules _ => else ...)) #:use-module (ice-9 ports) #:use-module ((guile) #:select ((_ . ^_) (... . ^...))) #:re-export (quote quasiquote unquote unquote-splicing define-syntax let-syntax letrec-syntax define lambda let let* letrec begin do if set! delay and or 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 rationalize floor ceiling truncate round exp log sin cos tan asin acos atan sqrt expt make-rectangular 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-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-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 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 ) #:export (null-environment syntax-rules cond case)) ;;; These definitions of `cond', `case', and `syntax-rules' differ from ;;; the ones in Guile in that they expect their auxiliary syntax (`_', ;;; `...', `else', and `=>') to be unbound. They also don't support ;;; some extensions from Guile (e.g. `=>' in `case'.). (define-syntax syntax-rules (lambda (x) (define (replace-underscores pattern) (syntax-case pattern (_) (_ #'^_) ((x . y) (with-syntax ((x (replace-underscores #'x)) (y (replace-underscores #'y))) #'(x . y))) ((x . y) (with-syntax ((x (replace-underscores #'x)) (y (replace-underscores #'y))) #'(x . y))) (#(x ^...) (with-syntax (((x ^...) (map replace-underscores #'(x ^...)))) #'#(x ^...))) (x #'x))) (syntax-case x () ((^_ dots (k ^...) . clauses) (identifier? #'dots) #'(with-ellipsis dots (syntax-rules (k ^...) . clauses))) ((^_ (k ^...) ((keyword . pattern) template) ^...) (with-syntax (((pattern ^...) (replace-underscores #'(pattern ^...)))) #`(lambda (x) (syntax-case x (k ^...) ((dummy . pattern) #'template) ^...))))))) (define-syntax case (lambda (stx) (let lp ((stx stx)) (syntax-case stx (else) (("case" x) #'(if #f #f)) (("case" x ((y ^...) expr ^...) clause ^...) #`(if (memv x '(y ^...)) (begin expr ^...) #,(lp #'("case" x clause ^...)))) (("case" x (else expr ^...)) #'(begin expr ^...)) (("case" x clause . ^_) (syntax-violation 'case "bad 'case' clause" #'clause)) ((^_ x clause clause* ^...) #`(let ((t x)) #,(lp #'("case" t clause clause* ^...)))))))) (define-syntax cond (lambda (stx) (let lp ((stx stx)) (syntax-case stx (else =>) (("cond") #'(if #f #f)) (("cond" (else expr ^...)) #'(begin expr ^...)) (("cond" (test => expr) clause ^...) #`(let ((t test)) (if t (expr t) #,(lp #'("cond" clause ^...))))) (("cond" (test) clause ^...) #`(or test #,(lp #'("cond" clause ^...)))) (("cond" (test expr ^...) clause ^...) #`(if test (begin expr ^...) #,(lp #'("cond" clause ^...)))) (("cond" clause . ^_) (syntax-violation 'cond "bad 'cond' clause" #'clause)) ((^_ clause clause* ^...) (lp #'("cond" clause clause* ^...))))))) (define (null-environment n) (unless (eqv? 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))) (set-module-kind! interface 'interface) (define bindings '(define quote lambda if set! cond case and or let let* letrec begin do delay quasiquote unquote define-syntax let-syntax letrec-syntax syntax-rules)) (module-use! interface (resolve-interface '(ice-9 safe-r5rs) #:select bindings)) interface))