Bu sadece mümkün ama o cond
kullanırken olan tam olarak ne var:
COND
da örneğin IF
ile yapılabilir size cond
kullanmak ne zaman
(macroexpand '(cond ((< v 0) (print "negative") (* -2 v))
((> v 0) (print "positive") (1- (* 2 v)))
(t (print "zero") 0)))
; ==>
(if (< v 0)
(progn (print "negative")
(* -2 v))
(if (> v 0)
(progn (print "positive")
(1- (* 2 v)))
(progn (print "zero")
0)))
CL'de makro genişletme aşamasında eşdeğer if
formu ile değiştirir. Bu genellikle her bir yer için bir kez olur, makro bir programda kullanılır.
Genellikle çekirdek dil, aynı şeyi yapmanın birçok yolunu desteklemez, bu nedenle uygulamanın ilkel kalması için bir neden bulamadığı sürece her şeyin if
'a dönüştürüleceğini tahmin ediyorum.
CLHS, formların başlığı "Special Operator IF
" ve "Macro COND
" olarak yansıtır.
Koşulları gerçekleştiren kendi makrolarınızı tanımlayabilirsiniz ve artık daha fazla sol olana kadar makrolar genişlediğinden, bunların yerine koymak için mevcut olan koşullardan birini seçebilirsiniz. Sen PoAIP 53. sayfasındaki olan
(defmacro aif (p a &optional c)
`(let ((it ,p))
(if it ,a ,c)))
(macroexpand '(aif (extremely-expensive-function x)
(use-value it)
(compute-other-result)))
; ==>
(let ((it (extremely-expensive-function x)))
(if it
(use-value it)
(compute-other-result)))
Zaten bir cevabınız var, ancak daha fazla okuma ve/veya alıştırma yapmak isterseniz, [Ortak Lisp: Nazik Anlamsal Sembolel Hesaplamaya Giriş] 'in koşullarını öneririm (http: //www.cs.cmu edu/~ DST/LispBook /). – Pascal