Как лучше всего перечислить список на естественном языке (Scala)?

Объект List имеет метод mkString , который может преобразовывать в строку с разделителем. Однако большинство человеческих языков обрабатывают последний элемент по-разному при перечислении списка. Например, A, B, C и D.

Что лучше всего с точки зрения размера кода и разумной эффективности для достижения этой цели? Чтобы быть точным, я ищу функцию, которая удовлетворяет:

assertEquals("",foo(List()))
assertEquals("A",foo(List("A")))
assertEquals("A and B",foo("List("A","B")))
assertEquals("A, B and C", foo(List("A","B","C")))
assertEquals("A, B, C and D", foo(List("A","B","C","D")))
5
задан axel22 23 October 2011 в 17:47
поделиться