| & \ — 結合子(和・積・差)とカスケード
分類: 結合子(本体層 core) / シグネチャ: Stream × Stream -> Stream / 記号は確定(ADR-22・spec §5.4)
意味
| 記号 | 意味 |
|---|---|
\| |
和(合併) |
& |
積(両方に含まれる点) |
\ |
差(左から右の点を除く)。バックスラッシュ U+005C——日本語フォントで円記号 ¥ に見えても、コードポイントは U+005C(¥=U+00A5 は別物) |
すべて同一優先度・左結合。& が絡む混在は順序で意味が変わるため括弧で明示する(spec §4.5)。
優先度付き上書き(カスケード)は専用記号を持たない——和・差の左結合順序適用で表す。宣言順 (後の項)が優先=CSS レイヤーの後勝ち。祝日の「加算」は和、「例外・反転」は差に分解できる(ADR-01)。
例
国民の休日——「祝日の翌日」と「祝日の前日」の積から祝日を引く(2026 年 9 月: 敬老の日 9/21 と 秋分の日 9/23 に挟まれた 9/22):
# eval: 2026-09-01..2026-10-01
@JP
statutory = [2026-09-21, 2026-09-23] covering: 2026..2026
sandwiched = ((statutory |> shift(+1, unit: day)) & (statutory |> shift(-1, unit: day))) \ statutory
statutory | sandwiched
#=> 2026-09-21 2026-09-22 2026-09-23
差で「土日を除く」:
# eval: 2026-01-01..2026-01-06
@JP
everyDay \ satSun
#=> 2026-01-01 2026-01-02 2026-01-05
落とし穴
|(和)は段の連結|>と別物——記号は三役に一対一(ADR-22)。- 値式の論理は語(
and/or/not)で書く。記号&/|は結合子に温存されている(spec §3.5)。 - カスケードの読み順は左から——
weekends | statutory | substitutes \ specialBizは 「積んで、積んで、最後に例外を引く」。 &と\は両辺の整列(粒度・tz)の一致を要求する(ADR-36・spec §4.5)。everyDay \ 瞬間列のような不一致は点が一致せず黙って空振りするため静的エラー——時刻付きの列は|> snapTo(day)で明示的に日へ揃えてから合成する。和|は不問(混合スケジュールは正当)だが、 混合の出力を後段の&/\に流すとそこで検査に掛かる。空テーブル([] covering:・ table-literal)は空虚適合=検査に通り、出力は相手の整列を継承する(ADR-45)。- 時刻付きスケジュールから「祝日の日に落ちる点を除く」形は等値の差では書けない——窓所属の述語
coincidesで書く(|> filter(t => not coincides(holidays, day, t))。F68=ADR-38 で 確定)。使い分けは「同じ点が欲しいなら結合子〈不整列は snapTo で整合〉・同じ所属(日)が 欲しいなら coincides」——day 整列同士の例外日は従来どおり結合子が正で、coincides への書き換えは悪化。 クロス tz の「同じ日付」の合成(TSE×NYSE の共通営業日)は三本目の枝——rebaseで 日付ラベル対応の再錨をしてから&((tseBiz |> rebase(to: "America/New_York")) & nyseBiz。 ADR-40・F69)。
関連
filter・roll(振替の導出)・snapTo(整列の明示整合)・coincides(窓所属の結合)・rebase(クロス tz の日付対応)・
ADR-01/04/22/36・代表例 §7.5。