mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 03:30:27 +02:00
Import SLIB 2d1.
This commit is contained in:
parent
92e7e03fae
commit
9ddacf866c
165 changed files with 61896 additions and 0 deletions
146
module/slib/eval.scm
Normal file
146
module/slib/eval.scm
Normal file
|
@ -0,0 +1,146 @@
|
|||
; "eval.scm", Eval proposed by Guillermo (Bill) J. Rozas for R5RS.
|
||||
; Copyright (c) 1997, 1998 Aubrey Jaffer
|
||||
;
|
||||
;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. I have made no warrantee 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.
|
||||
|
||||
;;; Rather than worry over the status of all the optional procedures,
|
||||
;;; just require as many as possible.
|
||||
|
||||
(require 'rev4-optional-procedures)
|
||||
(require 'dynamic-wind)
|
||||
(require 'transcript)
|
||||
(require 'with-file)
|
||||
(require 'values)
|
||||
|
||||
(define eval:make-environment
|
||||
(let ((eval-1 slib:eval))
|
||||
(lambda (identifiers)
|
||||
((lambda args args)
|
||||
#f
|
||||
identifiers
|
||||
(lambda (expression)
|
||||
(eval-1 `(lambda ,identifiers ,expression)))))))
|
||||
|
||||
(define eval:capture-environment!
|
||||
(let ((set-car! set-car!)
|
||||
(eval-1 slib:eval)
|
||||
(apply apply))
|
||||
(lambda (environment)
|
||||
(set-car!
|
||||
environment
|
||||
(apply (lambda (environment-values identifiers procedure)
|
||||
(eval-1 `((lambda args args) ,@identifiers)))
|
||||
environment)))))
|
||||
|
||||
(define interaction-environment
|
||||
(let ((env (eval:make-environment '())))
|
||||
(lambda () env)))
|
||||
|
||||
;;; null-environment is set by first call to scheme-report-environment at
|
||||
;;; the end of this file.
|
||||
(define null-environment #f)
|
||||
|
||||
(define scheme-report-environment
|
||||
(let* ((r4rs-procedures
|
||||
(append
|
||||
(cond ((provided? 'inexact)
|
||||
(append
|
||||
'(acos angle asin atan cos exact->inexact exp
|
||||
expt imag-part inexact->exact log magnitude
|
||||
make-polar make-rectangular real-part sin
|
||||
sqrt tan)
|
||||
(if (let ((n (string->number "1/3")))
|
||||
(and (number? n) (exact? n)))
|
||||
'(denominator numerator)
|
||||
'())))
|
||||
(else '()))
|
||||
(cond ((provided? 'rationalize)
|
||||
'(rationalize))
|
||||
(else '()))
|
||||
(cond ((provided? 'delay)
|
||||
'(force))
|
||||
(else '()))
|
||||
(cond ((provided? 'char-ready?)
|
||||
'(char-ready?))
|
||||
(else '()))
|
||||
'(* + - / < <= = > >= abs append apply assoc assq assv boolean?
|
||||
caaaar caaadr caaar caadar caaddr caadr caar cadaar cadadr cadar
|
||||
caddar cadddr caddr cadr call-with-current-continuation
|
||||
call-with-input-file call-with-output-file car cdaaar cdaadr
|
||||
cdaar cdadar cdaddr cdadr cdar cddaar cddadr cddar cdddar cddddr
|
||||
cdddr cddr cdr ceiling char->integer char-alphabetic? char-ci<=?
|
||||
char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase
|
||||
char-lower-case? char-numeric? char-upcase char-upper-case?
|
||||
char-whitespace? char<=? char<? char=? char>=? char>? char?
|
||||
close-input-port close-output-port complex? cons
|
||||
current-input-port current-output-port display eof-object? eq?
|
||||
equal? eqv? even? exact? floor for-each gcd inexact?
|
||||
input-port? integer->char integer? lcm length list list->string
|
||||
list->vector list-ref list-tail list? load make-string
|
||||
make-vector map max member memq memv min modulo negative?
|
||||
newline not null? number->string number? odd? open-input-file
|
||||
open-output-file output-port? pair? peek-char positive?
|
||||
procedure? quotient rational? read read-char real? remainder
|
||||
reverse round set-car! set-cdr! string string->list
|
||||
string->number string->symbol string-append string-ci<=?
|
||||
string-ci<? string-ci=? string-ci>=? string-ci>? string-copy
|
||||
string-fill! string-length string-ref string-set! string<=?
|
||||
string<? string=? string>=? string>? string? substring
|
||||
symbol->string symbol? transcript-off transcript-on truncate
|
||||
vector vector->list vector-fill! vector-length vector-ref
|
||||
vector-set! vector? with-input-from-file with-output-to-file
|
||||
write write-char zero?
|
||||
)))
|
||||
(r5rs-procedures
|
||||
(append
|
||||
'(call-with-values dynamic-wind eval interaction-environment
|
||||
null-environment scheme-report-environment values)
|
||||
r4rs-procedures))
|
||||
(r4rs-environment (eval:make-environment r4rs-procedures))
|
||||
(r5rs-environment (eval:make-environment r4rs-procedures)))
|
||||
(let ((car car))
|
||||
(lambda (version)
|
||||
(cond ((car r5rs-environment))
|
||||
(else
|
||||
(let ((null-env (eval:make-environment r5rs-procedures)))
|
||||
(set-car! null-env (map (lambda (i) #f) r5rs-procedures))
|
||||
(set! null-environment (lambda version null-env)))
|
||||
(eval:capture-environment! r4rs-environment)
|
||||
(eval:capture-environment! r5rs-environment)))
|
||||
(case version
|
||||
((4) r4rs-environment)
|
||||
((5) r5rs-environment)
|
||||
(else (slib:error 'eval 'version version 'not 'available)))))))
|
||||
|
||||
(define eval
|
||||
(let ((eval-1 slib:eval)
|
||||
(apply apply)
|
||||
(null? null?)
|
||||
(eq? eq?))
|
||||
(lambda (expression . environment)
|
||||
(if (null? environment) (eval-1 expression)
|
||||
(apply
|
||||
(lambda (environment)
|
||||
(if (eq? (interaction-environment) environment) (eval-1 expression)
|
||||
(apply (lambda (environment-values identifiers procedure)
|
||||
(apply (procedure expression) environment-values))
|
||||
environment)))
|
||||
environment)))))
|
||||
(set! slib:eval eval)
|
||||
|
||||
;;; Now that all the R5RS procedures are defined, capture r5rs-environment.
|
||||
(and (scheme-report-environment 5) #t)
|
Loading…
Add table
Add a link
Reference in a new issue