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

📄 cut.scm

📁 A framework written in Java for implementing high-level and dynamic languages, compiling them into J
💻 SCM
字号:
; In email of 2002-8-26 Al Petrofsky <al@petrofsky.org> sent to the; srfi-26@srfi.schemers.org mailing list the following:;;    I hereby place into the public domain all the code I posted to the;    SRFI-26 mailing list.;;    (The June 4 message is the one from which the reference implementation;    was trivially derived.);;    -al; REFERENCE IMPLEMENTATION FOR SRFI-26 "CUT"; ==========================================;; Sebastian.Egner@philips.com, 5-Jun-2002.; adapted from the posting by Al Petrofsky <al@petrofsky.org>; placed in the public domain;; The code to handle the variable argument case was originally; proposed by Michael Sperber and has been adapted to the new; syntax of the macro using an explicit rest-slot symbol. The; code to evaluate the non-slots for cute has been proposed by; Dale Jordan. The code to allow a slot for the procedure position; and to process the macro using an internal macro is based on ; a suggestion by Al Petrofsky. The code found below is, with; exception of this header and some changes in variable names,; entirely written by Al Petrofsky.;; compliance:;   Scheme R5RS (including macros).;; loading this file into Scheme 48 0.57:;   ,load cut.scm;; history of this file:;   SE,  6-Feb-2002: initial version as 'curry' with ". <>" notation;   SE, 14-Feb-2002: revised for <...>;   SE, 27-Feb-2002: revised for 'cut';   SE, 03-Jun-2002: revised for proc-slot, cute;   SE, 04-Jun-2002: rewritten with internal transformer (no "loop" pattern);   SE, 05-Jun-2002: replace my code by Al's; substituted "constant" etc.;     to match the convention in the SRFI-document; (srfi-26-internal-cut slot-names combination . se);   transformer used internally;     slot-names  : the internal names of the slots;     combination : procedure being specialized, followed by its arguments;     se          : slots-or-exprs, the qualifiers of the macro(module-export cut cute)  ;; Added by Per Bothner, for Kawa.(define-syntax srfi-26-internal-cut  (syntax-rules (<> <...>)    ;; construct fixed- or variable-arity procedure:    ;;   (begin proc) throws an error if proc is not an <expression>    ((srfi-26-internal-cut (slot-name ...) (proc arg ...))     (lambda (slot-name ...) ((begin proc) arg ...)))    ((srfi-26-internal-cut (slot-name ...) (proc arg ...) <...>)     (lambda (slot-name ... . rest-slot) (apply proc arg ... rest-slot)))    ;; process one slot-or-expr    ((srfi-26-internal-cut (slot-name ...)   (position ...)      <>  . se)     (srfi-26-internal-cut (slot-name ... x) (position ... x)        . se))    ((srfi-26-internal-cut (slot-name ...)   (position ...)      nse . se)     (srfi-26-internal-cut (slot-name ...)   (position ... nse)      . se)))); (srfi-26-internal-cute slot-names nse-bindings combination . se);   transformer used internally;     slot-names     : the internal names of the slots;     nse-bindings   : let-style bindings for the non-slot expressions.;     combination    : procedure being specialized, followed by its arguments;     se             : slots-or-exprs, the qualifiers of the macro(define-syntax srfi-26-internal-cute  (syntax-rules (<> <...>)    ;; If there are no slot-or-exprs to process, then:    ;; construct a fixed-arity procedure,    ((srfi-26-internal-cute      (slot-name ...) nse-bindings (proc arg ...))     (let nse-bindings (lambda (slot-name ...) (proc arg ...))))    ;; or a variable-arity procedure    ((srfi-26-internal-cute      (slot-name ...) nse-bindings (proc arg ...) <...>)     (let nse-bindings (lambda (slot-name ... . x) (apply proc arg ... x))))    ;; otherwise, process one slot:    ((srfi-26-internal-cute      (slot-name ...)         nse-bindings  (position ...)   <>  . se)     (srfi-26-internal-cute      (slot-name ... x)       nse-bindings  (position ... x)     . se))    ;; or one non-slot expression    ((srfi-26-internal-cute      slot-names              nse-bindings  (position ...)   nse . se)     (srfi-26-internal-cute      slot-names ((x nse) . nse-bindings) (position ... x)       . se)))); exported syntax(define-syntax cut  (syntax-rules ()    ((cut . slots-or-exprs)     (srfi-26-internal-cut () () . slots-or-exprs))))(define-syntax cute  (syntax-rules ()    ((cute . slots-or-exprs)     (srfi-26-internal-cute () () () . slots-or-exprs))))

⌨️ 快捷键说明

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