case - многоканальный преход

1 min read
В “прошлой жизни” акцентировался парой функций. Что сделаем и сейчас.
(NIL "case" _Case)
(NIL "casq" _Casq)
glob.l
# (case 'any (any1 . prg1) (any2 . prg2) ..) -> any
(de _Case (Exe)
(let (X (cdr Exe) A (set $At (eval (car X))))
(loop
(? (atom (shift X)) $Nil)
(let (Y (car X) Z (car Y))
(?
(or
(t? Z)
(if (atom Z) (equal Z A) (member A Z)) )
(run (cdr Y)) ) ) ) ) )
# (casq 'any (any1 . prg1) (any2 . prg2) ..) -> any
(de _Casq (Exe)
(let (X (cdr Exe) A (set $At (eval (car X))))
(loop
(? (atom (shift X)) $Nil)
(let (Y (car X) Z (car Y))
(? (or (t? Z) (== Z A) (memq A Z))
(run (cdr Y)) ) ) ) ) )
0
Subscribe to my newsletter
Read articles from Sergey Shishkin directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Sergey Shishkin
Sergey Shishkin
Всегда чему-то учусь!