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

📄 match.scm

📁 Scheme跨平台编译器
💻 SCM
📖 第 1 页 / 共 5 页
字号:
                                    '(unspecified error fail match)                                    "invalid value for ##match#error-control, legal values are")))))           (unreachable (lambda (plist match-expr)                          (for-each                            (lambda (x)                              (if (not (car (cddddr x)))				  (##sys#warn "Warning: unreachable pattern " (car x) 'in match-expr) ) )                            plist)))           (validate-pattern (lambda (pattern)                               (letrec ((simple? (lambda (x)                                                   (or (string? x)                                                       (boolean? x)                                                       (char? x)                                                       (number? x)                                                       (null? x))))                                        (ordinary (lambda (p)                                                    (let ((g88 (lambda (x                                                                        y)                                                                 (cons (ordinary                                                                         x)                                                                       (ordinary                                                                         y)))))                                                      (if (simple? p)                                                          ((lambda (p) p)                                                           p)                                                          (if (equal? p '_)                                                              ((lambda ()                                                                 '_))                                                              (if (pattern-var?                                                                    p)                                                                  ((lambda (p)                                                                     p)                                                                   p)                                                                  (if (pair?                                                                        p)                                                                      (if (equal?                                                                            (car p)                                                                            'quasiquote)                                                                          (if (and (pair?                                                                                     (cdr p))                                                                                   (null?                                                                                     (cddr p)))                                                                              ((lambda (p)                                                                                 (quasi                                                                                   p))                                                                               (cadr p))                                                                              (g88 (car p)                                                                                   (cdr p)))                                                                          (if (equal?                                                                                (car p)                                                                                'quote)                                                                              (if (and (pair?                                                                                         (cdr p))                                                                                       (null?                                                                                         (cddr p)))                                                                                  ((lambda (p)                                                                                     p)                                                                                   p)                                                                                  (g88 (car p)                                                                                       (cdr p)))                                                                              (if (equal?                                                                                    (car p)                                                                                    '?)                                                                                  (if (and (pair?                                                                                             (cdr p))                                                                                           (list?                                                                                             (cddr p)))                                                                                      ((lambda (pred                                                                                                ps)                                                                                         `(? ,pred                                                                                             ,@(map ordinary                                                                                                    ps)))                                                                                       (cadr p)                                                                                       (cddr p))                                                                                      (g88 (car p)                                                                                           (cdr p)))                                                                                  (if (equal?                                                                                        (car p)                                                                                        '=)                                                                                      (if (and (pair?                                                                                                 (cdr p))                                                                                               (pair?                                                                                                 (cddr p))                                                                                               (null?                                                                                                 (cdddr                                                                                                   p)))                                                                                          ((lambda (sel                                                                                                    p)                                                                                             `(= ,sel                                                                                                 ,(ordinary                                                                                                    p)))                                                                                           (cadr p)                                                                                           (caddr                                                                                             p))                                                                                          (g88 (car p)                                                                                               (cdr p)))                                                                                      (if (equal?                                                                                            (car p)                                                                                            'and)                                                                                          (if (and (list?                                                                                                     (cdr p))                                                                                                   (pair?                                                                                                     (cdr p)))                                                                                              ((lambda (ps)                                                                                                 `(and ,@(map ordinary                                                                                                              ps)))                                                                                               (cdr p))                                                                                              (g88 (car p)                                                                                                   (cdr p)))                                                                                          (if (equal?                                                                                                (car p)                                                                                                'or)                                                                                              (if (and (list?                                                                                                         (cdr p))                                                                                                       (pair?                                                                                                         (cdr p)))                                                                                                  ((lambda (ps)                                                                                                     `(or ,@(map ordinary                                                                                                                 ps)))                                                                                                   (cdr p))                                                                                                  (g88 (car p)                                                                                                       (cdr p)))                                                                                              (if (equal?                                                                                                    (car p)                                                                                                    'not)                                                                                                  (if (and (list?                                                                                                             (cdr p))                                                                                                           (pair?                                                                                                             (cdr p)))                                                                                                      ((lambda (ps)                                                                                                         `(not ,@(map ordinary                                                                                                                      ps)))                                                                                                       (cdr p))                                                                                                      (g88 (car p)                                                                                                           (cdr p)))                                                                                                  (if (equal?                                                                                                        (car p)                                                                                                        '$)                                                                                                      (if (and (pair?                                                                                                                 (cdr p))                                                                                                               (symbol?                                                                                                                 (cadr p))                                                                                                               (list?                                                                                                                 (cddr p)))                                                                                                          ((lambda (r                                                                                                                    ps)                                                                                                             `($ ,r                                                                                                                 ,@(map ordinary                                                                                                                        ps)))                                                                                                           (cadr p)                                                                                                           (cddr p))                                                                                                          (g88 (car p)                                                                                                               (cdr p)))                                                                                                      (if (equal?                                                                                                            (car p)                                                                                                            'set!)                                                                                                          (if (and (pair?                                                                                                                     (cdr p))                                                                                                                   (pattern-var?                                                                                                                     (cadr p))                                                                                                                   (null?                                                                                                                     (cddr p)))                                                                                                              ((lambda (p)                                                                                                                 p)                                                                                                               p)                                                                                                              (g88 (car p)                                                                                                                   (cdr p)))                                                                                                          (if (equal?                                                                                                                (car p)                                                                                                                'get!)                                                                                                              (if (and (pair?                                                                                                                         (cdr p))                                                                                                                       (pattern-var?                                                                                                                         (cadr p))                                                                                                                       (null?                                                                                                                         (cddr p)))                                                                                                                  ((lambda (p)                                                                                                                     p)                                                                                                                   p)                                                                                                                  (g88 (car p)                                                                                                                       (cdr p)))                                                                                                              (if (equal?                                                                                                                    (car p)                                                                                                                    'unquote)                                                                                                                  (g88 (car p)                                                                                                                       (cdr p))                                                                                                                  (if (equal?                                                                                                                        (car p)                                                                                                                        'unquote-splicing)                                                                                                                      (g88 (car p)                                                                                                                           (cdr p))                                                                                                                      (if (and (pair?                                                                                                                                 (cdr p))                                                                                                                               (dot-dot-k?                                                                                                                                 (cadr p))                                                                                                                               (null?                                                                                                                                 (cddr p)))                                                                                                                          ((lambda (p                                                                                                                                    ddk)                                                                                                                             `(,(ordinary                                                                                                                                  p)                                                                                                                                ,ddk))                                                                                                                           (car p)                                                                                                                           (cadr p))                                                                                                                          (g88 (car p)                                                                                                                               (cdr p)))))))))))))))                                                                      (if (vector?                                                                            p)                                                                          ((lambda (p)                                                                             (let* ((pl (vector->list                                                                                          p))                                                                                    (rpl (reverse                               

⌨️ 快捷键说明

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