[Scheme] 束縛する値を省略できるように let を書き換える

Common Lisp では

CL-USER> (let (a b c) c)
NIL

のように let で束縛する値を省略できる.
省略された変数は nil に束縛される.

しかし,Scheme にはそのような省略記法はない.
そこで,マクロを使い Common Lisp のような略記法を導入する.
次のように書く.

(define-syntax old-let let)

(define-syntax %let
  (syntax-rules ()
    ((_ (te ...) () body ...)
     (old-let (te ...)
       body ...))
    ((_ (te ...) ((id e) be ...) body ...)
     (%let (te ... (id e)) (be ...) body ...))
    ((_ (te ...) (id be ...) body ...)
     (%let (te ... (id '())) (be ...) body ...))))

(define-syntax let
  (syntax-rules ()
    ((_ e1 e2 ...)
     (%let () e1 e2 ...))))

Common Lisp と同様に束縛する値を省略した変数は空リストに束縛されるようにしている.


Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /usr/home/bugyo/public_html/b-log/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /usr/home/bugyo/public_html/b-log/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /usr/home/bugyo/public_html/b-log/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /usr/home/bugyo/public_html/b-log/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /usr/home/bugyo/public_html/b-log/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /usr/home/bugyo/public_html/b-log/wp-includes/category.php on line 383
This entry was posted in コンピュータ and tagged , , , by bugyo. Bookmark the permalink.

Deprecated: Creation of dynamic property WP_Query::$comments_by_type is deprecated in /usr/home/bugyo/public_html/b-log/wp-includes/comment-template.php on line 1528

Leave a Reply

Your email address will not be published. Required fields are marked *

*