関数だと引数は全部実行というか評価されてしまうが、
マクロでなんとでもなる
(defmacro myif (pred good bad)
(list 'if pred good bad))
もしくは略記法として
(defmacro myif (pred good bad)
`(if ,pred ,good ,bad))
とすると、
(myif t (insert "ok") (insert "ng"))
と書ける。こうやってS式を返すような関数と同様にmyifを「マクロとして」定義すると、
(myif ...)というフォームはまず最初に「展開」されてから実行される。ここだと
(if t (insert "ok") (insert "ng")) と最初から書いてあったのと同じことになって、
nbの部分は実行されないという寸法。これはつまらない例だが。
もうちょっと面白い例だと、
(defmacro awhen (pred &rest body)
`(let ((it ,pred))
(when it
,@body)))
とすると条件式の結果を本体(body)の中でitとして使えるとか
(awhen "hogehoge" (message it))
special formとマクロの違いは組み込みかどうかぐらい。
こんな感じで色々制御構文を作ったり、遅延評価のを実装したりもできるが、
あんまり濫用すると自分でもわからなくなってくる諸刃の剣
長文御免
ニュース
- 【日中】中国の王毅外相が関係正常化の「条件」を提示 岩屋前外相との会談で ★2 [煮卵★]
- タイムズカー、個人情報最大660万件流出 氏名、住所、生年月日、電話番号、メアド、運転免許情報、学生証などの画像 ★2 [おっさん友の会★]
- 【バレーボール】男子・日本代表 髙橋藍の兄、高橋塁…同性愛者であると公表「初めて自分自身を認めることができました」 [阿弥陀ヶ峰★]
- 物価高に7割超”年収追い付かず” 必要な年収増加額は平均約38万円 住友生命 [首都圏の虎★]
- 【フジ】GTO:反町隆史主演の連ドラ 最終回視聴率3.7% 個人は2.1% 昔の教え子集結! 鬼塚、涙の最後の授業 [Ailuropoda melanoleuca★]
- 「ようやく初の女性。メッセージ性ある」東大新総長 選考「総合で」 [少考さん★]
- 【高市悲報】AIマンガの作り方の本、作例のクオリティが高すぎると話題 もうこれ漫画家廃業だろ [158478931]
- 【高市悲報】日経暴落 [667773354]
- 【悲報】亜月ねね先生宅、大量の監視カメラが設置されて終わる [398059782]
- 小泉防衛大臣「核兵器保有の議論したい」 [834922174]
- 【実況】博衣こよりのえちえちホロドリ水着ガチャ🧪★3
- 【家計に打撃】たまごの価格、年末にかけて値上がりか [943688309]