Gauche > Archives > 2025/04/01

2025/02/06 07:05:06 UTCkaki
#
よく分かってません。
#
あ、native typeがclassに置き換えられちゃってるのかな。
2025/02/06 07:08:13 UTCshiro
#
あ、その問題はそれですね。
#
なんでここ置き換えたんだったかな。classに置き換えたら拡大しちゃうからまずいよな。
#
superがclassでsubがnative typeの場合を分ける必要があるのか
2025/02/06 07:21:06 UTCkaki
#
ですかね
2025/02/06 07:41:10 UTCshiro
#
直和型/ユニオン型については、ソース上でunion typeって書いてるのにドキュメントでsum typeって書いてて混乱してたみたいです。union typeに統一します。
2025/02/06 08:07:31 UTCkaki
#
(or (is-a? super </>) <class>) だと常に真になっちゃってますけどなんとなく動いてますね。分岐自体必要なかった…?
2025/02/06 08:17:36 UTCkaki
#
常に小さくできるからdelegate-to-superする必要はない気がします。
2025/02/06 08:24:59 UTCshiro
#
あれほんとだ。
2025/02/06 08:56:49 UTCkaki
#
そういえば、Cの char に対応するnative typeってFFIとかで必要にならないんですか?ABIとかはよく知らないんですが、Cの型システム上では char は signed char とも unsigned char とも異なる型(中身は処理系定義でどちらかと同じ)みたいなので。
2025/02/06 10:56:25 UTCshiro
#
単純に引数や戻り値での受け渡しの場合、1 byteであることさえ合わせてあれば、Scheme側でsignedと解釈しようがunsignedと解釈しようが自由ではあるんだけど、ヘッダ読み込んで型取り出す場合とかは分けておいた方が気持ちいいかなあ。
2025/02/06 11:10:35 UTCshiro
#
今あるffi (undocumentedだけど) の低レベル呼び出しルーチンではint系はどうせ6汎用レジスタかスタック渡しの時に64bitになるからcharの符号の有無は気にしてないな。ただstructとかを扱い始めたら気にせざるを得ないかな。
2025/02/06 11:28:16 UTCkaki
#
ふーむ、なるほど。
2025/02/18 11:11:12 UTCkaki
#
.$ の説明で、"これはR7RSの 範囲内では有効な識別子でないので" とありますが、R5RSで有効でなかったものでR7RSでは有効だと思います。まとめて置換してしまったのでしょうか。⟨peculiar identifier⟩ → . ⟨dot subsequent⟩ ⟨subsequent⟩* で、⟨dot subsequent⟩ にはinitialが書けるので。Gaucheも |.$| ではなく .$ とwriteしてくれます。
2025/02/18 13:24:24 UTCshiro
#
あ、多分R5RSからそのままアップデートしたんだと思います。Mahalo.
2025/02/20 06:20:58 UTCkaki
#
(ineq x <= y < z) の話なんですが、英語で書くのが難しいのとまとまってないのでここに書いちゃいます。典型的な不等式以外にも使えそうな気がして、最初はandでchainすることや間のオペランドが折り重なることに注目して命名した方がいいかと思ったんですが、そうすると一般的になりすぎたり(chainとか)長くなったり(and-chainとか)するんですよね。簡易記法のためのマクロなんだから、説明的すぎるより短い名前がいいでしょうし。かといって、&とか&&とかだと短すぎたり記号的すぎたりする気もしますし、記号でこれ以上複雑にすると暗号的になりそうですし、and*とするにはandと違いすぎますし、自信を持って推せる名前は思い付きませんでした。
#
典型的な不等式っぽい手続き以外でineqで使えそうな手続きはいくつか思い付いていて、member、alist-ref辺りはまだましなんですが、hash-table-delete!みたいな副作用があって成否を返すやつを使い出すと変な感じがします。まあ、これはそう使う人が変っていう話かもしれませんが。
2025/02/20 06:26:29 UTCkaki
#
関連する話題として、(complement =) もしくは complement の略記が欲しくなりそうですね。(ineq a < x (complement =) y < b) くらいは普通にありそうなので。(.$ not =) の方が短いなんて。
2025/02/20 06:31:19 UTCkaki
#
(complement =) に略記を与えちゃうと string=? 他はどうするんだとなっちゃいますが。
2025/02/20 07:18:00 UTCkaki
#
(ineq a < x (complement =) y < b) これ、(< x b) じゃないし普通じゃないか。
2025/02/20 07:22:54 UTCshiro
#
そう、最初は一種のchainingだから(Pythonでもchain of comparisonって言ってるし)、一般化するならそれに類する名前がいいかなと思ってたんだけどchainはsrfi-197で取られてるし、長くなったら意味ないし。
#
記号では、不等式なので >< とか (<> だとcutとかぶる)、数学で二項関係を一般化するときよく ~ を使うから ~* とか考えたんだけど、試してみたらいまいちだった。
2025/02/20 08:27:40 UTCkaki
#
andでchainするので記号を使うんだったら&を軸にするかなと思いました。&*とか。…&~とか?うーん。使用頻度的に記号2文字を割り当てるほどでもない気もするんですよね。ineqは長さや衝突しなさ的には丁度よさそうな感じがします。
2025/03/02 17:19:55 UTCkaki
#
(define (foo)
  (guard (e (#f #f))
    (raise "hoge")))

(foo)
;; スクリプトトップレベルで実行するとsegvします。main経由やREPLでは大丈夫でした。
2025/03/02 19:48:32 UTCshiro
#
なるほど。以前のバージョンだと動くのでどっかでバグ入れてますね
2025/03/02 21:48:59 UTCshiro
#
https://github.com/shirok/Gauche/issues/1120
2025/03/26 07:15:26 UTCkaki
#
(define (foo :key (bar 1)
                  (baz 2))
  ;;         ^(a) ^(b)
  0)
#
キーワード引数の途中で改行するとき、scheme-mode等のデフォルトでは(a)の位置になりますが、(b)の位置にインデントしたくなるんですよね。どうしてます?Gaucheのソースだとどちらもあるようですが。
2025/03/26 12:02:16 UTCshiro
#
bの位置が好みですが、自動で揃えてくれないので手でやってます。 aになってるのは多分自動インデントしたあと直し忘れ。
2025/03/26 17:26:16 UTCkaki
#
なるほど。では自動インデントがうまいこと書けたらシェアします。今の所いいアイデアがあるわけではありませんが。