問題
「毎月第 1・第 3 月曜」(ごみ収集日の定番形)の本体式を書け(前提は wkst: Mon の @JP のみ・データ不要)。
正答
mondays = everyDay |> filter(d => weekday(d) == Mon)
(mondays |> within(month) |> nth(1)) | (mondays |> within(month) |> nth(3))
判定基準: 評価範囲 2026-09-01..2026-11-01 で 2026-09-07, 2026-09-21, 2026-10-05, 2026-10-19(別解可・束縛を使わない一本書きも可)。
解説
nth は序数を 1 つしか取らない(複数序数は言語の宿題=F11)ので、「第 1 と第 3」は
和 | で合成するのが現行の正準形。月曜の列を束縛(mondays = …)してから 2 回使うと
重複が消えて読みやすい——束縛は式の整理に使ってよい(§3.5・§4.8。ただしラムダ変数を含む部分式の括り出しは除く——束縛右辺から呼び出し側のラムダ変数は見えない=ADR-53・点依存の値は引数付き束縛で)。第 2・第 4 型
(隔週集金など)も同型で書ける。impl 実走検証済み(2026-08-01・公開 HEAD 9e46dcf)。
検証
# eval: 2026-09-01..2026-11-01
premise JP {
calendar-system: Gregorian
tz: "Asia/Tokyo"
wkst: Mon
}
@JP
mondays = everyDay |> filter(d => weekday(d) == Mon)
(mondays |> within(month) |> nth(1)) | (mondays |> within(month) |> nth(3))
2026-09-07
2026-09-21
2026-10-05
2026-10-19