⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boot-9.scm

📁 MSYS在windows下模拟了一个类unix的终端
💻 SCM
📖 第 1 页 / 共 5 页
字号:
;;;; Apply f to successive elements of l until exhaustion or while f returns #f.;; If returning early, return the return value of f.;;(define (or-map f lst)  (let loop ((result #f)	     (l lst))    (or result	(and (not (null? l))	     (loop (f (car l)) (cdr l))))))(if (provided? 'posix)    (primitive-load-path "ice-9/posix.scm"))(if (provided? 'socket)    (primitive-load-path "ice-9/networking.scm"))(define file-exists?  (if (provided? 'posix)      (lambda (str)	(access? str F_OK))      (lambda (str)	(let ((port (catch 'system-error (lambda () (open-file str OPEN_READ))			   (lambda args #f))))	  (if port (begin (close-port port) #t)	      #f)))))(define file-is-directory?  (if (provided? 'posix)      (lambda (str)	(eq? (stat:type (stat str)) 'directory))      (lambda (str)	(let ((port (catch 'system-error			   (lambda () (open-file (string-append str "/.")						 OPEN_READ))			   (lambda args #f))))	  (if port (begin (close-port port) #t)	      #f)))))(define (has-suffix? str suffix)  (let ((sufl (string-length suffix))	(sl (string-length str)))    (and (> sl sufl)	 (string=? (substring str (- sl sufl) sl) suffix))))(define (system-error-errno args)  (if (eq? (car args) 'system-error)      (car (list-ref args 4))      #f));;; {Error Handling};;;(define (error . args)  (save-stack)  (if (null? args)      (scm-error 'misc-error #f "?" #f #f)      (let loop ((msg "~A")		 (rest (cdr args)))	(if (not (null? rest))	    (loop (string-append msg " ~S")		  (cdr rest))	    (scm-error 'misc-error #f msg args #f)))));; bad-throw is the hook that is called upon a throw to a an unhandled;; key (unless the throw has four arguments, in which case;; it's usually interpreted as an error throw.);; If the key has a default handler (a throw-handler-default property),;; it is applied to the throw.;;(define (bad-throw key . args)  (let ((default (symbol-property key 'throw-handler-default)))    (or (and default (apply default key args))	(apply error "unhandled-exception:" key args))))(define (tm:sec obj) (vector-ref obj 0))(define (tm:min obj) (vector-ref obj 1))(define (tm:hour obj) (vector-ref obj 2))(define (tm:mday obj) (vector-ref obj 3))(define (tm:mon obj) (vector-ref obj 4))(define (tm:year obj) (vector-ref obj 5))(define (tm:wday obj) (vector-ref obj 6))(define (tm:yday obj) (vector-ref obj 7))(define (tm:isdst obj) (vector-ref obj 8))(define (tm:gmtoff obj) (vector-ref obj 9))(define (tm:zone obj) (vector-ref obj 10))(define (set-tm:sec obj val) (vector-set! obj 0 val))(define (set-tm:min obj val) (vector-set! obj 1 val))(define (set-tm:hour obj val) (vector-set! obj 2 val))(define (set-tm:mday obj val) (vector-set! obj 3 val))(define (set-tm:mon obj val) (vector-set! obj 4 val))(define (set-tm:year obj val) (vector-set! obj 5 val))(define (set-tm:wday obj val) (vector-set! obj 6 val))(define (set-tm:yday obj val) (vector-set! obj 7 val))(define (set-tm:isdst obj val) (vector-set! obj 8 val))(define (set-tm:gmtoff obj val) (vector-set! obj 9 val))(define (set-tm:zone obj val) (vector-set! obj 10 val))(define (tms:clock obj) (vector-ref obj 0))(define (tms:utime obj) (vector-ref obj 1))(define (tms:stime obj) (vector-ref obj 2))(define (tms:cutime obj) (vector-ref obj 3))(define (tms:cstime obj) (vector-ref obj 4))(define file-position ftell)(define (file-set-position port offset . whence)  (let ((whence (if (eq? whence '()) SEEK_SET (car whence))))    (seek port offset whence)))(define (move->fdes fd/port fd)  (cond ((integer? fd/port)	 (dup->fdes fd/port fd)	 (close fd/port)	 fd)	(else	 (primitive-move->fdes fd/port fd)	 (set-port-revealed! fd/port 1)	 fd/port)))(define (release-port-handle port)  (let ((revealed (port-revealed port)))    (if (> revealed 0)	(set-port-revealed! port (- revealed 1)))))(define (dup->port port/fd mode . maybe-fd)  (let ((port (fdopen (apply dup->fdes port/fd maybe-fd)		      mode)))    (if (pair? maybe-fd)	(set-port-revealed! port 1))    port))(define (dup->inport port/fd . maybe-fd)  (apply dup->port port/fd "r" maybe-fd))(define (dup->outport port/fd . maybe-fd)  (apply dup->port port/fd "w" maybe-fd))(define (dup port/fd . maybe-fd)  (if (integer? port/fd)      (apply dup->fdes port/fd maybe-fd)      (apply dup->port port/fd (port-mode port/fd) maybe-fd)))(define (duplicate-port port modes)  (dup->port port modes))(define (fdes->inport fdes)  (let loop ((rest-ports (fdes->ports fdes)))    (cond ((null? rest-ports)	   (let ((result (fdopen fdes "r")))	     (set-port-revealed! result 1)	     result))	  ((input-port? (car rest-ports))	   (set-port-revealed! (car rest-ports)			       (+ (port-revealed (car rest-ports)) 1))	   (car rest-ports))	  (else	   (loop (cdr rest-ports))))))(define (fdes->outport fdes)  (let loop ((rest-ports (fdes->ports fdes)))    (cond ((null? rest-ports)	   (let ((result (fdopen fdes "w")))	     (set-port-revealed! result 1)	     result))	  ((output-port? (car rest-ports))	   (set-port-revealed! (car rest-ports)			       (+ (port-revealed (car rest-ports)) 1))	   (car rest-ports))	  (else	   (loop (cdr rest-ports))))))(define (port->fdes port)  (set-port-revealed! port (+ (port-revealed port) 1))  (fileno port))(define (setenv name value)  (if value      (putenv (string-append name "=" value))      (putenv name)));;; {Load Paths};;;;;; Here for backward compatability;;(define scheme-file-suffix (lambda () ".scm"))(define (in-vicinity vicinity file)  (let ((tail (let ((len (string-length vicinity)))		(if (zero? len)		    #f		    (string-ref vicinity (- len 1))))))    (string-append vicinity		   (if (or (not tail)			   (eq? tail #\/))		       ""		       "/")		   file)));;; {Help for scm_shell};;; The argument-processing code used by Guile-based shells generates;;; Scheme code based on the argument list.  This page contains help;;; functions for the code it generates.(define (command-line) (program-arguments));; This is mostly for the internal use of the code generated by;; scm_compile_shell_switches.(define (load-user-init)  (let* ((home (or (getenv "HOME")		   (false-if-exception (passwd:dir (getpwuid (getuid))))		   "/"))  ;; fallback for cygwin etc.	 (init-file (in-vicinity home ".guile")))    (if (file-exists? init-file)	(primitive-load init-file))));;; {Loading by paths};;; Load a Scheme source file named NAME, searching for it in the;;; directories listed in %load-path, and applying each of the file;;; name extensions listed in %load-extensions.(define (load-from-path name)  (start-stack 'load-stack	       (primitive-load-path name)));;; {Transcendental Functions};;;;;; Derived from "Transcen.scm", Complex trancendental functions for SCM.;;; Written by Jerry D. Hedden, (C) FSF.;;; See the file `COPYING' for terms applying to this program.;;;(define (exp z)  (if (real? z) ($exp z)      (make-polar ($exp (real-part z)) (imag-part z))))(define (log z)  (if (and (real? z) (>= z 0))      ($log z)      (make-rectangular ($log (magnitude z)) (angle z))))(define (sqrt z)  (if (real? z)      (if (negative? z) (make-rectangular 0 ($sqrt (- z)))	  ($sqrt z))      (make-polar ($sqrt (magnitude z)) (/ (angle z) 2))))(define expt  (let ((integer-expt integer-expt))    (lambda (z1 z2)      (cond ((integer? z2)             (if (negative? z2)		 (/ 1 (integer-expt z1 (- z2)))		 (integer-expt z1 z2)))	    ((and (real? z2) (real? z1) (>= z1 0))	     ($expt z1 z2))	    (else	     (exp (* z2 (log z1))))))))(define (sinh z)  (if (real? z) ($sinh z)      (let ((x (real-part z)) (y (imag-part z)))	(make-rectangular (* ($sinh x) ($cos y))			  (* ($cosh x) ($sin y))))))(define (cosh z)  (if (real? z) ($cosh z)      (let ((x (real-part z)) (y (imag-part z)))	(make-rectangular (* ($cosh x) ($cos y))			  (* ($sinh x) ($sin y))))))(define (tanh z)  (if (real? z) ($tanh z)      (let* ((x (* 2 (real-part z)))	     (y (* 2 (imag-part z)))	     (w (+ ($cosh x) ($cos y))))	(make-rectangular (/ ($sinh x) w) (/ ($sin y) w)))))(define (asinh z)  (if (real? z) ($asinh z)      (log (+ z (sqrt (+ (* z z) 1))))))(define (acosh z)  (if (and (real? z) (>= z 1))      ($acosh z)      (log (+ z (sqrt (- (* z z) 1))))))(define (atanh z)  (if (and (real? z) (> z -1) (< z 1))      ($atanh z)      (/ (log (/ (+ 1 z) (- 1 z))) 2)))(define (sin z)  (if (real? z) ($sin z)      (let ((x (real-part z)) (y (imag-part z)))	(make-rectangular (* ($sin x) ($cosh y))			  (* ($cos x) ($sinh y))))))(define (cos z)  (if (real? z) ($cos z)      (let ((x (real-part z)) (y (imag-part z)))	(make-rectangular (* ($cos x) ($cosh y))			  (- (* ($sin x) ($sinh y)))))))(define (tan z)  (if (real? z) ($tan z)      (let* ((x (* 2 (real-part z)))	     (y (* 2 (imag-part z)))	     (w (+ ($cos x) ($cosh y))))	(make-rectangular (/ ($sin x) w) (/ ($sinh y) w)))))(define (asin z)  (if (and (real? z) (>= z -1) (<= z 1))      ($asin z)      (* -i (asinh (* +i z)))))(define (acos z)  (if (and (real? z) (>= z -1) (<= z 1))      ($acos z)      (+ (/ (angle -1) 2) (* +i (asinh (* +i z))))))(define (atan z . y)  (if (null? y)      (if (real? z) ($atan z)	  (/ (log (/ (- +i z) (+ +i z))) +2i))      ($atan2 z (car y))))(define (log10 arg)  (/ (log arg) (log 10)));;; {Reader Extensions};;;;;; Reader code for various "#c" forms.;;;(read-hash-extend #\' (lambda (c port)			(read port)))(define read-eval? (make-fluid))(fluid-set! read-eval? #f)(read-hash-extend #\.                  (lambda (c port)                    (if (fluid-ref read-eval?)                        (eval (read port) (interaction-environment))                        (error                         "#. read expansion found and read-eval? is #f."))));;; {Command Line Options};;;(define (get-option argv kw-opts kw-args return)  (cond   ((null? argv)    (return #f #f argv))   ((or (not (eq? #\- (string-ref (car argv) 0)))	(eq? (string-length (car argv)) 1))    (return 'normal-arg (car argv) (cdr argv)))   ((eq? #\- (string-ref (car argv) 1))    (let* ((kw-arg-pos (or (string-index (car argv) #\=)			   (string-length (car argv))))	   (kw (symbol->keyword (substring (car argv) 2 kw-arg-pos)))	   (kw-opt? (member kw kw-opts))	   (kw-arg? (member kw kw-args))	   (arg (or (and (not (eq? kw-arg-pos (string-length (car argv))))			 (substring (car argv)				    (+ kw-arg-pos 1)				    (string-length (car argv))))		    (and kw-arg?			 (begin (set! argv (cdr argv)) (car argv))))))      (if (or kw-opt? kw-arg?)	  (return kw arg (cdr argv))	  (return 'usage-error kw (cdr argv)))))   (else    (let* ((char (substring (car argv) 1 2))	   (kw (symbol->keyword char)))      (cond       ((member kw kw-opts)	(let* ((rest-car (substring (car argv) 2 (string-length (car argv))))	       (new-argv (if (= 0 (string-length rest-car))			     (cdr argv)			     (cons (string-append "-" rest-car) (cdr argv)))))	  (return kw #f new-argv)))       ((member kw kw-args)	(let* ((rest-car (substring (car argv) 2 (string-length (car argv))))	       (arg (if (= 0 (string-length rest-car))			(cadr argv)			rest-car))	       (new-argv (if (= 0 (string-length rest-car))			     (cddr argv)			     (cdr argv))))	  (return kw arg new-argv)))       (else (return 'usage-error kw argv)))))))(define (for-next-option proc argv kw-opts kw-args)  (let loop ((argv argv))    (get-option argv kw-opts kw-args		(lambda (opt opt-arg argv)		  (and opt (proc opt opt-arg argv loop))))))(define (display-usage-report kw-desc)  (for-each   (lambda (kw)     (or (eq? (car kw) #t)	 (eq? (car kw) 'else)	 (let* ((opt-desc kw)		(help (cadr opt-desc))		(opts (car opt-desc))		(opts-proper (if (string? (car opts)) (cdr opts) opts))		(arg-name (if (string? (car opts))			      (string-append "<" (car opts) ">")			      ""))		(left-part (string-append			    (with-output-to-string			      (lambda ()				(map (lambda (x) (display (keyword-symbol x)) (display " "))				     opts-proper)))			    arg-name))		(middle-part (if (and (< (string-length left-part) 30)				      (< (string-length help) 40))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -