おまけくりかえし

閏年のおまけのやっつけくりかえし

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