Mam listę, która może zawierać elementy, które będą porównywane jako równe. Chciałbym mieć podobną listę, ale z usuniętym jednym elementem. Tak więc z (A, B, C, B, D) chciałbym móc „usunąć” tylko jedno B, aby uzyskać np. (A, C, B, D). Kolejność elementów w wyniku nie ma znaczenia.
Mam działający kod, napisany w Scali w sposób inspirowany Lispem. Czy jest na to bardziej idiomatyczny sposób?
Kontekstem jest gra karciana, w której w grze znajdują się dwie talie standardowych kart, więc mogą istnieć zduplikowane karty, ale nadal gra się je pojedynczo.
def removeOne(c: Card, left: List[Card], right: List[Card]): List[Card] = {
if (Nil == right) {
return left
}
if (c == right.head) {
return left ::: right.tail
}
return removeOne(c, right.head :: left, right.tail)
}
def removeCard(c: Card, cards: List[Card]): List[Card] = {
return removeOne(c, Nil, cards)
}