#あ、多分R5RSからそのままアップデートしたんだと思います。Mahalo.
#(ineq x <= y < z) の話なんですが、英語で書くのが難しいのとまとまってないのでここに書いちゃいます。典型的な不等式以外にも使えそうな気がして、最初はandでchainすることや間のオペランドが折り重なることに注目して命名した方がいいかと思ったんですが、そうすると一般的になりすぎたり(chainとか)長くなったり(and-chainとか)するんですよね。簡易記法のためのマクロなんだから、説明的すぎるより短い名前がいいでしょうし。かといって、&とか&&とかだと短すぎたり記号的すぎたりする気もしますし、記号でこれ以上複雑にすると暗号的になりそうですし、and*とするにはandと違いすぎますし、自信を持って推せる名前は思い付きませんでした。
#典型的な不等式っぽい手続き以外でineqで使えそうな手続きはいくつか思い付いていて、member、alist-ref辺りはまだましなんですが、hash-table-delete!みたいな副作用があって成否を返すやつを使い出すと変な感じがします。まあ、これはそう使う人が変っていう話かもしれませんが。
#関連する話題として、(complement =) もしくは complement の略記が欲しくなりそうですね。(ineq a < x (complement =) y < b) くらいは普通にありそうなので。(.$ not =) の方が短いなんて。
#(complement =) に略記を与えちゃうと string=? 他はどうするんだとなっちゃいますが。
#(ineq a < x (complement =) y < b) これ、(< x b) じゃないし普通じゃないか。
#そう、最初は一種のchainingだから(Pythonでもchain of comparisonって言ってるし)、一般化するならそれに類する名前がいいかなと思ってたんだけどchainはsrfi-197で取られてるし、長くなったら意味ないし。
#記号では、不等式なので >< とか (<> だとcutとかぶる)、数学で二項関係を一般化するときよく ~ を使うから ~* とか考えたんだけど、試してみたらいまいちだった。
#andでchainするので記号を使うんだったら&を軸にするかなと思いました。&*とか。…&~とか?うーん。使用頻度的に記号2文字を割り当てるほどでもない気もするんですよね。ineqは長さや衝突しなさ的には丁度よさそうな感じがします。
#(define (foo)
(guard (e (#f #f))
(raise "hoge")))
(foo)
;; スクリプトトップレベルで実行するとsegvします。main経由やREPLでは大丈夫でした。#なるほど。以前のバージョンだと動くのでどっかでバグ入れてますね
##(define (foo :key (bar 1)
(baz 2))
;; ^(a) ^(b)
0)#キーワード引数の途中で改行するとき、scheme-mode等のデフォルトでは(a)の位置になりますが、(b)の位置にインデントしたくなるんですよね。どうしてます?Gaucheのソースだとどちらもあるようですが。
#bの位置が好みですが、自動で揃えてくれないので手でやってます。 aになってるのは多分自動インデントしたあと直し忘れ。
#なるほど。では自動インデントがうまいこと書けたらシェアします。今の所いいアイデアがあるわけではありませんが。
#キーワード引数の自動インデント、書いてみました。 https://gist.github.com/gengar/4e469cc407f83547232093c48e35c6fa stateに外側の開き括弧の開始位置が全部保存されていたので、思ったよりすんなりできました。デバッグはまだ甘いです。あとlisp-localとの共存にはまだ未知の部分があります。major modeに組み込めば大丈夫だろうと期待しているのですが、お試しで (setq-local lisp-indent-function 'gauche-mode-indent-function) などとするとlisp-localは忘れ去られます。 #(define-constant ((foo x) y) x) はOKで (define-inline ((foo x) y) x) はNGなんですね。
#キーワード自動インデント<おお、自分はquack使っててgauche-modeは使って無いんですが、試してみます。
#define-inlineのそれは多分深く考えて無かったと思うのだけれど、define-inlineには束縛を作るというのと手続きにインライン情報を付加するという2つの操作があるからちょっとややこしい。でもできなくはないかな?
##高階defineに対応しました。
#major modeが他のindent functionを提供している場合は、scheme-indent-functionの所をそれに置き換えた方が良さそうです。
#gosh> (format "~f" 0.0001)
"1.0e-4"
#これって意図通りですか?CLのは "0.0001" になるっぽいですが
##カジュアルに小数表示する方法が欲しいですね
#そうですね。ScmNumberFormatのデフォルト値を変えるのが手軽かなあ。
#format の ~f はexponential notation無しで表示せよという指示子なんだと思ってました。printf の %f もそんな感じですよね。
#まだ~eを実装してないのでかりそめの動作ではあるんですが、この際ちゃんと実装するかなあ。
#一応CLでも、~fも桁数指定がなくてmagnitudeがうんと大きかったり小さかったりした場合はexponential notationにフォールバックして良いことになってはいる