documentation mówi, że Set.head
zwraca "pierwszy" element, a .tail
zwraca "wszystkie oprócz pierwszego". * Ponieważ Set
tak naprawdę nie ma "pierwszego" elementu, dokumentacja ostrzega, że bez zamówionego typu, możesz uzyskać inny wynik w różnych seriach. Ale czy masz gwarancję, że ogon nie będzie zawierał głowy?Czy głowa i ogon zestawu gwarantują wzajemną wyłączność?
Powodem Pytam się zastanawiam, czy to OK rekursja dół Set
takiego:
def recurse(itemsToExamine: Set[Item], acc: Result): Result =
if (itemsToExamine.isEmpty) acc
else {
val item = itemsToExamine.head
recurse(
item.spawnMoreItems ++ itemsToExamine.tail,
acc.updatedFor(item))
}
Jeśli to uzasadnione, z pewnością byłoby ładniej niż konwersja z Set
do Seq
iz powrotem w celu oddzielenia głowy i ogona na każdej rekursji.
* W rzeczywistości komunikat "wybiera pierwszy element" i "wybiera wszystkie oprócz pierwszego elementu". Zakładam, że "wybiera" to po prostu kiepski wybór słów. Jeśli istnieje powód, by powiedzieć "wybiera" zamiast "zwraca", proszę dać mi znać.
Co to jest odpowiednik '.tail' dla' Iterator'? '.toSet' po wywołaniu' .next'? –