Ladies_Man

Управляющие конструкции императивных языков

Dec 26th, 2013
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 3.33 KB | None | 0 0
  1. ;;(use-syntax (ice-9 syncase))
  2.  
  3. (define-syntax when
  4.   (syntax-rules ()
  5.     ((when cond? expr ...)
  6.      (if cond? (list expr ...)))))
  7.  
  8. (define-syntax unless
  9.   (syntax-rules ()
  10.     ((unless cond? expr ...)
  11.      (if (not cond?) (list expr ...)))))
  12.  
  13. (define-syntax for
  14.   (syntax-rules (in)
  15.     ((for x in xs expr ...)
  16.      (letrec ((iter (lambda (l)
  17.                       (if (not (null? l))
  18.                           (begin (let ((x (car l)))
  19.                                  (list expr ...))
  20.                                  (iter (cdr l)))))))
  21.            (iter (car (list xs)))))
  22.    ((for xs as x expr ...)
  23.      (letrec ((iter (lambda (l)
  24.                       (if (not (null? l))
  25.                           (begin
  26.                              (let ((x (car l)))
  27.                                (list expr ...))
  28.                              (iter (cdr l)))))))
  29.            (iter (car (list xs)))) )))
  30.  
  31. (define-syntax for
  32.   (syntax-rules (in)
  33.     ((for x in xs expr ...)
  34.      (letrec ((iter (lambda (l)
  35.                       (if (not (null? l))
  36.                           (begin
  37.                              (let ((x (car l)))
  38.                                (list expr ...))
  39.                              (iter (cdr l)))))))
  40.            (iter (car (list xs)))) )
  41.    ((for xs as x expr ...)
  42.      (letrec ((iter (lambda (l)
  43.                       (if (not (null? l))
  44.                           (begin
  45.                              (let ((x (car l)))
  46.                                (list expr ...))
  47.                              (iter (cdr l)))))))
  48.            (iter (car (list xs)))) )))
  49.  
  50. (define-syntax for
  51.   (syntax-rules (in)
  52.     ((for x in xs expr ...)
  53.      (letrec ((iter (lambda (l)
  54.                       (if (not (null? l))
  55.                           (begin
  56.                              (let ((x (car l)))
  57.                                (list expr ...))
  58.                              (iter (cdr l)))))))
  59.            (iter (car (list xs)))) )
  60.    ((for xs as x expr ...)
  61.      (letrec ((iter (lambda (l)
  62.                       (if (not (null? l))
  63.                           (begin
  64.                              (let ((x (car l)))
  65.                                (list expr ...))
  66.                              (iter (cdr l)))))))
  67.            (iter (car (list xs)))) )))
  68.  
  69. (define-syntax while
  70.   (syntax-rules ()
  71.     ((while s expr ...)
  72.      (letrec ((iter (lambda ()
  73.                       (if s
  74.                           (begin
  75.                              (list expr ...)
  76.                              (iter))))))
  77.            (iter)))))
  78.  
  79. (define-syntax repeat
  80.   (syntax-rules (until)
  81.     ((repeat (expr ...) until cond?)
  82.      (letrec ((iter (lambda ()
  83.                       (if (not cond?)
  84.                           (begin
  85.                              (list expr ...)
  86.                              (iter))))))
  87.            (begin
  88.              (list expr ...)
  89.              (iter))))))
  90.  
  91. (define-syntax cout
  92.   (syntax-rules ()
  93.     ((cout args ...)
  94.     (letrec ((iter (lambda (l i)
  95.                      (if (not (null? l))
  96.                        (begin
  97.                          (if (even? i)
  98.                              (if (equal? (car l) 'endl)
  99.                                  (newline)
  100.                                  (display (car l))))
  101.                          (iter (cdr l) (+ i 1)))))))
  102.         (iter (list 'args ...) 1)))))
Advertisement
Add Comment
Please, Sign In to add comment