filter — 述語で間引く
分類: フィルタ(本体層 core) / シグネチャ: filter(on: P) / filter(x => 条件) : Stream -> Stream / 名は確定(spec §5.4)
意味
述語を満たす点だけを残す。二つの形を取る(where は filter に統合済み。ADR-25):
- premise 述語
filter(on: P)— 軸P(在圏 premise で有効点ストリームに解決される名前、または 導出ストリーム)に属する点だけ残す。カレンダー依存はここ以降(I8)。 - 値式述語
filter(x => 条件)— 各点xを束縛するラムダで判定。ラムダの中では cycle ラベルの 値関数(weekday(x))や窓→値の射影(ordinalInなど)が使える。
例
営業日だけ残す(2026-01-01 は祝日、1/3・1/4 は週末):
# eval: 2026-01-01..2026-01-08
@JP
everyDay |> filter(on: bizDay)
#=> 2026-01-02 2026-01-05 2026-01-06 2026-01-07
月曜だけ残す(ラベル述語):
# eval: 2026-01-01..2026-01-20
@JP
everyDay |> filter(d => weekday(d) == Mon)
#=> 2026-01-05 2026-01-12 2026-01-19
射影と組んで「窓の座標で選ぶ」——毎月 11 日:
# eval: 2026-01-01..2026-04-01
@JP
everyDay |> filter(d => ordinalIn(day, month, d) == 11)
#=> 2026-01-11 2026-02-11 2026-03-11
落とし穴
filterは生成子ではない——変換(段)なので、式の先頭には置けない(F45。everyDay |> filter(…))。on:と ラムダは同じ語の二つの口。両方同時には渡さない。- 生成子純粋(I8): 営業日への依存は必ず filter 以降に置く。これにより式の前半(暦法部分)が カレンダー差し替えに対して安定する。
filter(on: P)は点の等値所属——入力と軸の整列一致を要する(ADR-36・spec §4.5。不一致は 黙って空振りせず静的エラー)。on:には実体名の直指(on: TSE)も立てられる(ADR-35)。- 窓所属で間引くなら値式述語に
coincides——時刻付き通知から臨時休業「日」を 除く形はfilter(t => not coincides(closures, day, t))(等値の差では書けない。F68=ADR-38)。