|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
;; This file:
;; http://anggtwu.net/elisp/pcase-tests.el.html
;; http://anggtwu.net/elisp/pcase-tests.el
;; (find-angg "elisp/pcase-tests.el")
;; Author: Eduardo Ochs <eduardoochs@gmail.com>
;;
;; (defun e () (interactive) (find-angg "elisp/pcase-tests.el"))
;; (find-es "emacs" "pcase-quickref")
;; https://www.emacswiki.org/emacs/PatternMatching
(defun oddp (n) (= (mod n 2) 1))
(defun pow-fast (x n)
(pcase `(,x ,n)
(`(,x 0) 1)
((and (let (pred oddp) n) `(,x ,n))
(* x (pow-fast (* x x) (/ n 2))))
(`(,x ,n)
(pow-fast (* x x) (/ n 2)))))
(pow-fast 2 5)
(pow-fast 2 4)
(pow-fast 2 0)
;; -> 32
(defun pow-fast (x n)
(pcase `(,x ,n)
(`(,x 0) (list :case1))
((and (let (pred oddp) n) `(,x ,n)) (list :case2 x n))
(`(,x ,n) (list :case3 x n))))
(defun pow-fast (x n)
(pcase `(,x ,n)
(`(,x 0) (list :case1 x n))
((and (let (pred oddp) n) `(,x ,n)) (list :case2 x n))
(`(,x ,n) (list :case3 x n))
))
(defun pow-fast (x n)
(pcase `(,x ,n)
((and (let (pred oddp) n) `(,x ,n)) (list :case2 x n))
))
(pcase '(2 5)
((and (let (pred oddp) 7)
`(,x ,n))
(list :case2 x n))
)
(defun oddp (n) (= (mod n 2) 1))
(pcase '(2 5)
((and (let (and (pred oddp) `,c) 7)
`(,a ,b))
(list :case2 a b c))
)
(pcase '(3 4) ((and (let `,a 2) `(,b ,c)) (list :abc a b c)))
(pcase '(3 4) ((and (let a 2) `(,b ,c)) (list :abc a b c)))
(pcase '(2 3) ((and `(,a ,b) (let c 2)) (list :abc a b c)))
x
n
(pcase '(2 5)
(`(,x 0) 1)
((and (let (pred oddp) n) `(,x ,n))
(* x (pow-fast (* x x) (/ n 2))))
(`(,x ,n)
(pow-fast (* x x) (/ n 2))))
(pcase '(20 30) (`(,a ,b) (list :ab a b)))
(find-eppm '(pcase '(20 30) (`(,a ,b) (list :ab a b))))
(find-elinode "")
(find-elnode "")
(oddp 5)
(oddp 4)
(setq my-sexp '(find-eev2021video "2:34" "foo" "bar"))
(pcase my-sexp (`(,a ,b . ,c) (list a b c)))
(pcase my-sexp ((and
`(,a ,b . ,c)
(guard (symbolp a))
(guard (stringp b))
)
(list a b c)))
(pcase '(10 20 40)
(`(,a ,b ,c)
(list :abc a b c)))
(pcase '(10 20 40)
((and `(,a ,b ,c))
(list :abc a b c)))
(pcase '(10 20 40)
((and `(,a ,b ,c)
(guard (< a 15)))
(list :abc a b c)))
(pcase '(10 20 40)
((and `(,a ,b ,c)
(guard (< a 5)))
(list :abc a b c)))
(pcase '(10 20) ( `(,a ,b) (list :ab a b)))
(pcase '(10 20) ((and `(,a ,b)) (list :ab a b)))
(pcase '(10 20) ((and `(,a ,b) (guard (< a 5))) (list :ab a b)))
(pcase '(10 20) ((and `(,a ,b) (guard (< a 15))) (list :ab a b)))
(pcase '(10 20) ((and `(,a ,b) (let (guard (< a 5)) c)) (list :ab a b)))
(pcase '(10 20) (`,a (list a)))
(pcase '(10 20) (let (`,a) 30))
(pcase '(10 20) (let (pred oddp) 30))
‘(let PATTERN EXPR)’
(pcase-let* ((`(,a ,b) '(10 20))
((guard (< a 5)))
(c (+ a b)))
(list a b c))
(pcase '(10 20 40)
((and `(,a ,b ,c)
(guard (< a 5)))
(list :abc a b c)))
(and `(,a ,b ,c)
(let d (+ a b))))
;; Local Variables:
;; coding: utf-8-unix
;; End: