nond - "non-cond"

Чтобы рядом было с циклом о кондиционалах. Надо было бы вместе с cond, но пропустил. На фоне такое разнообразия не мудрено. Но прежде, чем переходить к циклам (итерациям? рекурсии? “репитам”? … ) сначала покончим (?) с условными переходами. Хотя их ещё целая куча, обозначенных просто символами UNICODE типа, их парами, или такие как комбинации, как например, le0 … Скорее всего они должны быть классифицированы не как контролы, а, именно, как кондиционалы, а может тегированы там и там.
(nond ('any1 . prg1) ('any2 . prg2) ..) -> any
Многовариантное условное выражение с отрицанием («non-cond»): если любое из условий anyN
равно NIL
, выполняется prgN
и возвращается результат. В противном случае (все условия равны NIL
), возвращается NIL
.
https://software-lab.de/doc/refN.html#nond
А вот код определения
(NIL "nond" _Nond)
glob.l
# (nond ('any1 . prg1) ('any2 . prg2) ..) -> any
(de _Nond (Exe)
(let X Exe
(loop
(? (atom (shift X)) $Nil)
(let Y (car X)
(? (nil? (eval (car Y)))
(run (cdr Y)) ) )
(set $At @) ) ) )
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
Всегда чему-то учусь!