before — 点集合を「p より前」に切り出す
分類: 糖衣(stdlib・Gregorian 公開語=変換) / シグネチャ: before(p) : Stream -> Stream(p は日付つきの日時リテラル) / 名は確定(ADR-55・2026-10-19・spec §5.4) / 1.1 の追加拡張
意味
入力の点のうち p より前(p を含まない) を残す。展開は filter 1 段(糖衣=spec §4.8):
before(p) = s => s |> filter(t => t < p)
対の since(p 以後・含む)と組んで半開 [since, before) を切る——評価範囲 [from, to)・窓・
isOpen と同じ境界規約。before は終点側の双対で、1.0 の核では epochOrdinal の序数比較(単位つき)か差 \
でしか書けなかった(差は整列「なし」の和で止まり、窓を落とす)。
例
日粒度——10/13 より前の営業日(10/12 はスポーツの日):
# eval: 2026-10-01..2026-10-20
@JP
bizDay |> before(2026-10-13)
#=> 2026-10-01 2026-10-02 2026-10-05 2026-10-06 2026-10-07 2026-10-08 2026-10-09
時刻付き——締め切り当日の 9 時から 17 時の手前まで(17:00 は入らない):
# eval: 2026-11-04..2026-11-05
@JP
hourly = everyInstant |> strideBy(1h, from: 2026-01-01)
hourly |> since(2026-11-04T09:00) |> before(2026-11-04T17:00)
#=> 2026-11-04T09:00 2026-11-04T10:00 2026-11-04T11:00 2026-11-04T12:00 2026-11-04T13:00 2026-11-04T14:00 2026-11-04T15:00 2026-11-04T16:00
落とし穴
-
日粒度の列に時刻付きリテラル——日の点は 00:00 なので
everyDay |> before(2026-11-04T17:00)は 11/4 を 含む(00:00 < 17:00)。当日を外すなら日付を書く(before(2026-11-04))・含めるなら 1 日後 (before(2026-11-05))——評価範囲のtoと同じ作法。警告は出ない(文書化のみ)。 -
takeLastのuntil:は点包含——beforeは非包含。「直近 N」はuntil:、「pより前の全部」はbefore。 -
「今」は式に埋めない・単独時刻は渡せない・同名の top-level 束縛は静的エラー・新しい点は作らない——
sinceの落とし穴と同じ。 -
整列「なし」の和(
(bizDay | hourly) |> before(p))にもそのまま掛かる——差\で作ると ADR-36 の静的エラー。
関連
since(対・p 以後)・filter(展開先)・takeLast(until: は点包含)・
epochOrdinal(1.0 の書き方)・spec §4.8/§4.9・ADR-55。