日本語 · English

cycle — 並列反復ラベル(窓でなくラベル)

分類: 窓生成語(premise 層) / シグネチャ: cycle(labels) anchor: r : Stream -> Stream(labeled) / 名は確定(spec §5.4)

意味

対象のパーティション窓に反復ラベルを付す。窓を作らない——曜日が日を分割しないように、ラベルは 窓と並列の概念(ADR-03)。周期長は任意(7・10・12・60…)、適用先も任意の窓(day の曜日に限らず monthyear にも張れる——十二支は year cycle […])。

年の十二支——2020 年(子)を anchor に、午年の元日を選ぶ:

# eval: 2020-01-01..2028-01-01
premise JPEto = Gregorian with {
  tz: "Asia/Tokyo"                  # anchor(日付リテラル)の錨打ちに要る(ADR-33)
  yearBranch = year cycle [子, 丑, 寅, 卯, 辰, 巳, 午, 未, 申, 酉, 戌, 亥] anchor: 2020-01-01
}
@JPEto
everyDay |> within(year) |> first |> filter(d => yearBranch(d) == 午)
#=> 2026-01-01

標準の曜日(Gregorian.weekday)を述語で読む:

# eval: 2026-01-01..2026-01-20
@JP
everyDay |> filter(d => weekday(d) == Mon)
#=> 2026-01-05 2026-01-12 2026-01-19

落とし穴

関連

filter(ラベル述語)・テーブルリテラル(データ由来のラベル)・ WKST との分離(stdlib/gregorian.md §4)・ADR-03/27/30。