Gauche > Archives > 2026/01/19

2026/01/19 08:28:58 UTCkaki
#
;; compose に渡すと arity が死んでしまう問題
gosh> (define (const x y) x)
const
gosh> (arity const)
2
gosh> (arity (.$ values const))
#<arity-at-least 0>
#
を考えていて、以前、引数の数を指定して手続きを作る話が出ていたのを思い出しました。このへん https://chaton.practical-scheme.net/gauche/a/2024/09/05
#
シグネチャを取り出せればそれを eval すれば良さそうなんですが、<procedure> の info スロットがどのような値を取り得るかって特に保証はないですよね。
2026/01/19 08:45:10 UTCkaki
#
case-lambda とか適用可能オブジェクトとかあるから思ったより面倒かな、arity的な情報を保存する compose
2026/01/19 08:51:31 UTCkaki
#
コンパイラがstaticにカタをつけられる方向で頑張るべきか…?
2026/01/19 10:02:04 UTCkaki
#
(話がとっ散らかってしまいますが)…というのを、(g (f x)) で (f x) が #f のときに短絡するやつが欲しいなあと思って、composeの#f短絡版があればいいかなと考えていたときに思いました。srfi.197の chain-and はちょっとだるい気がしまして。で、考えていたら思い付いたのが、$ を拡張して ($ g $? f x) で短絡できるようにするといいんじゃないかと。JSの ?. やRubyの &. からの着想です。
2026/01/19 10:24:53 UTCkaki
#
$? があると #f が来た時に$式全体が短絡すればいいと考えていましたが、この挙動だと途中までの短絡をしたい場合に ($ h ($ g $? f x)) みたいにネストする必要が出てきますね(折角のネストキラー(?)なのに)。逆に直近だけ短絡するなら、全部短絡したい場合は ($ h $? g $? f x) と書かせるか。
#
このような複雑さを、現状のシンプルな $ に持ち込んでよいものか。
2026/01/19 16:15:06 UTCkaki
#
別に用意するなら (?$ h $ g $? f x) とか?暗号めいてきた気がしないでもないですが。$? が $? なのは $* に揃えてます。先頭の ?$ は、$? だと述語っぽくなっちゃうので。