将Python代码转换为Kotlin

我发现代码生成n个不同的颜色 。 我拿了代码,并从中做了一个课

import colorsys import itertools from fractions import Fraction class DistinctColorsGenerator: def __init__(self): self._bias = lambda x: (math.sqrt(x / 3) / Fraction(2, 3) + Fraction(1, 3)) / Fraction(6, 5) self._gen_rgb = lambda x : colorsys.hsv_to_rgb(*x) self._flatten = itertools.chain.from_iterable self._hsvs = lambda: self._flatten(map(self._hsv, self._fracs())) self._rgbs = lambda: map(self._gen_rgb, self._hsvs()) self._gen_colors = lambda: map(self._gen_color, self._rgbs()) def generate(self, number): return list(itertools.islice(self._gen_colors(), number)) def _zenos_dichotomy(self): for k in itertools.count(): yield Fraction(1, 2 ** k) def _fracs(self): yield 0 for k in self._zenos_dichotomy(): i = k.denominator for j in range(1, i, 2): yield Fraction(j, i) def _hsv(self, h): for s in [Fraction(6, 10)]: for v in [Fraction(8, 10), Fraction(5, 10)]: yield (h, s, v) def _gen_color(self, x): uint8tuple = map(lambda y: int(y * 255), x) return list(uint8tuple) 

我想把它转换成Kotlin,问题是我的大部分Kotlin经验(以及Python)正在编写普通的无聊代码。 而看起来像这样通过生成一个无限序列并懒惰地评估它解决了这个问题。 我可以看看Python代码,了解正在发生的事情,编写一个简单而枯燥的代码。 但在此之前,我想问一下,是否有人能够展示如何在Kotlin中实现类似的事情

我阅读了一些文档(正如评论中所建议的那样),这就是我想出来的(以防万一有人会发现它有用)

 class DistinctColorsGenerator { fun generate(number: Int): List<ColorRgb> = generateRgbs.take(number).toList() private val genHsvs = buildSequence { fractions.forEach { createHsvColors(it).forEach { yield(it) } } } private val generateRgbs = buildSequence { genHsvs.forEach { yield(it.toRgb()) } } private val zenosDichotomy = buildSequence { var d = 1 while (true) { yield(Fraction(1, d)) d *= 2 } } private val fractions = buildSequence { yield(Fraction(0, 1)) zenosDichotomy.forEach { val i = it.denominator.toInt() for (j in 1 until i step 2) { yield(Fraction(j, i)) } } } private fun createHsvColors(h: Fraction<Int>) = buildSequence { listOf(Fraction(6, 10)).forEach { s -> listOf(Fraction(8, 10), Fraction(5, 10)).forEach { v -> yield(ColorHsv(h, s, v)) } } } } 

ColorRgbColorHsvFraction类只是数据类。 ColorHsv.toRgb()我从这里拿走了