Gauche > Archives > 2019/10/26

2019/10/26 02:04:33 UTCshiro
#
パターンに#u8(...)をリテラルとして許すことはできますが、その中にパターン変数は書けないんですよね。#u8(a b c)というのはread時にエラーになっちゃう
2019/10/26 02:49:39 UTCkaki
#
パターンを新設する必要がありますね。それか既存のパターンにかぶせるか(例えば ($ <u8vector> a b c) とか)。
2019/10/26 03:37:06 UTCshiro
#
コンストラクタがパターンマッチにできる言語だと綺麗なんですが、Schemeだとコンストラクタと普通の手続き呼び出しの区別がないからな… ($ <u8vector> ...) はいけそうな感じがしますね。
2019/10/26 03:48:12 UTCkaki
#
$ をコンストラクタパターンだと思えば自然な拡張になるかと思ったんですが、現状でもレコード以外のオブジェクトにスロット順でマッチなんですね。ユーザ定義でuvectorのようなクラスを作って
2019/10/26 03:50:32 UTCshiro
#
<u8vector>とかはスロット無いんでバッティングしないだろうと思ったんだけど将来的に不定長要素+スロットを持つハイブリッドな何かが出てきた時困るか
2019/10/26 03:50:49 UTCkaki
#
途中で送信してしまった。uvectorのようなクラスを作ったらuvectorとしての中身を取り出したいときととスロットで取り出したいときで衝突してしまいますね。@ パターンで回避はできますが
#
はい。
#
欲を言えばユーザ定義も可能なコンストラクタパターンみたいなものがあるとよさそうなんですが、それはちょっと大きな工事になりそうです。
2019/10/26 03:56:55 UTCshiro
#
安直に記号を増やすなら ($$ <u8vector> ...) とか… (コンストラクタではなく)クラス名を使うメリットは ($$ <sequence> ...) のようにジェネリックなマッチもできる
2019/10/26 04:06:03 UTCkaki
#
そうですね。コンストラクタと言いつつ、メソッドでexpanderを引っ張ってくるようなものを考えていました。