我还没有完全验证正确性和缺少一个错误的错误,但请耐心等待。
这里的目标是将一副纸牌(定义为 {Card*})处理/拆分为多个 Decks(可选地将 {Card*} 作为构造函数参数)。我想以循环方式拆分牌,就像实际上会发牌一样。这是我到目前为止的代码:
{Deck*} split(Integer ways) {
assert(theCards.size % ways == 0);
{Card*} empty = {};
value decks = LinkedList { for (i in 0:ways) empty };
for(i -> card in entries(theCards)) {
value deckIndex = i % ways;
assert (exists current = decks[deckIndex]);
decks.set(deckIndex, {card, *current});
}
return { for(cards in decks) Deck(cards) };
}
- 这是将列表拆分为多个列表的正确/惯用方式吗?
- 如果我不想反转所有卡片(即附加到列表而不是前置,或反转可迭代),我该怎么做?
- 我将如何
decks
在循环中懒惰地初始化变量的值? - 有什么办法可以摆脱需要
empty
我拥有的变量吗? - 我有没有机会在不需要可变数据结构的情况下编写这个?
谢谢,对于多问题感到抱歉(我已经在 codereview.stackexchange.com 上创建了这个,但我没有代表在ceylon
那里创建标签)。