おまけくりかえし
閏年のおまけのやっつけくりかえし
scala> :paste // Entering paste mode (ctrl-D to finish) val date = new LocalDate(2019,12,31) val date_1 = date.minusMonths(12) val minus = (date: LocalDate) => { date.minusMonths(1) } val retry: (LocalDate => LocalDate, Int, LocalDate) => LocalDate = ( attempt: LocalDate ⇒ LocalDate, attempts: Int, date: LocalDate ) => { if (attempts > 0) { retry(attempt, attempts - 1, attempt(date)) } else { attempt(date) } } val date_2 = retry(minus, 11, date) // Exiting paste mode, now interpreting. date: org.joda.time.LocalDate = 2019-12-31 date_1: org.joda.time.LocalDate = 2018-12-31 minus: org.joda.time.LocalDate => org.joda.time.LocalDate = $$Lambda$9942/918571530@38e8638e retry: (org.joda.time.LocalDate => org.joda.time.LocalDate, Int, org.joda.time.LocalDate) => org.joda.time.LocalDate = $$Lambda$9943/100942799@d27754c date_2: org.joda.time.LocalDate = 2018-12-28