Skip to content
This repository has been archived by the owner on Dec 29, 2018. It is now read-only.

Commit

Permalink
Add lambda-match family
Browse files Browse the repository at this point in the history
  • Loading branch information
Tomohiro Matsuyama committed Mar 30, 2014
1 parent ece076c commit 804d9ee
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 2 deletions.
36 changes: 36 additions & 0 deletions README.md
Expand Up @@ -1009,6 +1009,42 @@ Similar to LET-MATCH but matches sequentially.

Equivalent to (let-match ((PATTERN ARG)) BODY...).

### [Macro] lambda-match

lambda-match &body clauses

Equivalent to (lambda (arg) (match arg CLAUSES...)).

### [Macro] lambda-ematch

lambda-ematch &body clauses

Equivalent to (lambda (arg) (ematch arg CLAUSES...)).

### [Macro] lambda-cmatch

lambda-cmatch &body clauses

Equivalent to (lambda (arg) (cmatch arg CLAUSES...)).

### [Macro] lambda-match1

lambda-match1 pattern &body body

Equivalent to (lambda-match (PATTERN BODY...)).

### [Macro] lambda-ematch1

lambda-ematch1 pattern &body body

Equivalent to (lambda-ematch (PATTERN BODY...)).

### [Macro] lambda-cmatch1

lambda-cmatch1 pattern &body body

Equivalent to (lambda-cmatch (PATTERN BODY...)).

Authors
-------

Expand Down
27 changes: 27 additions & 0 deletions src/extra.lisp
Expand Up @@ -44,3 +44,30 @@ be used in BINDINGS."
(defmacro let-match1 (pattern arg &body body)
"Equivalent to (let-match ((PATTERN ARG)) BODY...)."
`(let-match ((,pattern ,arg)) ,.body))

(defmacro lambda-match (&body clauses)
"Equivalent to (lambda (arg) (match arg CLAUSES...))."
(with-unique-names (arg)
`(lambda (,arg) (match ,arg ,@clauses))))

(defmacro lambda-ematch (&body clauses)
"Equivalent to (lambda (arg) (ematch arg CLAUSES...))."
(with-unique-names (arg)
`(lambda (,arg) (ematch ,arg ,@clauses))))

(defmacro lambda-cmatch (&body clauses)
"Equivalent to (lambda (arg) (cmatch arg CLAUSES...))."
(with-unique-names (arg)
`(lambda (,arg) (cmatch ,arg ,@clauses))))

(defmacro lambda-match1 (pattern &body body)
"Equivalent to (lambda-match (PATTERN BODY...))."
`(lambda-match (,pattern ,@body)))

(defmacro lambda-ematch1 (pattern &body body)
"Equivalent to (lambda-ematch (PATTERN BODY...))."
`(lambda-ematch (,pattern ,@body)))

(defmacro lambda-cmatch1 (pattern &body body)
"Equivalent to (lambda-cmatch (PATTERN BODY...))."
`(lambda-cmatch (,pattern ,@body)))
12 changes: 10 additions & 2 deletions src/packages.lisp
Expand Up @@ -147,7 +147,8 @@
(defpackage :optima.extra
(:use :cl :optima)
(:import-from :alexandria
#:plist-alist)
#:plist-alist
#:with-unique-names)
(:export #:alist
#:plist

Expand All @@ -156,7 +157,14 @@
#:unless-match
#:let-match
#:let-match*
#:let-match1)
#:let-match1

#:lambda-match
#:lambda-ematch
#:lambda-cmatch
#:lambda-match1
#:lambda-ematch1
#:lambda-cmatch1)
(:documentation "
### [Pattern] alist
Expand Down

0 comments on commit 804d9ee

Please sign in to comment.