我真的服了我自己了,我居然把 Tuple 和 Fold 做成了 Kotlin 语言扩展级别的东西了……
emptyTuple<Int>() == emptyTuple<Int>()
tupleOf(1,2) != tupleOf(1)
"abc".asIterable().fold(asString()) == "abc"
"abc".asIterable().fold(asList()) == listOf('a', 'b', 'c')
listOf(1,2,3).fold(JoinFold(0, Int::plus)) == 6#KotlinEmmm operator fun not() = object: SatisfyTest<IN>() {
override val test = !this@SatisfyTest.test
}
原来这样的 object 的 label 是它的 父树 的 name……
override val test = !this@SatisfyTest.test
}
原来这样的 object 的 label 是它的 父树 的 name……
fun <IN> Feed<IN>.takeWhile(predicate: Predicate<IN>): Sequence<IN>
= sequence { while (true) yield(consumeIf(predicate) ?: break) }
fun <IN> Feed<IN>.take(n: Cnt): Sequence<IN>
= takeWhile { true }.take(n) 删了壮士断腕……
inputOf(1,2,3,10,2).asSequence().takeWhile { it < 10 }.asIterable().fold(JoinFold(0, {this*10+it}))#KotlinEmmm Parser.kt:333:76: error: 'toDashString' is a member and an extension at the same time. References to such elements are not allowed
override fun toString() = ranges.joinToString("", transform = CharRange::toDashString).surround("[" to "]")
override fun toString() = ranges.joinToString("", transform = CharRange::toDashString).surround("[" to "]")
var terminator = terminate.read(s)
while (terminator == notParsed) {
reducer.accept(item.read(s) ?: return notParsed)
terminator = terminate.read(s)
}
return Tuple2(reducer.finish(), terminator) Kotlin 牛逼啊,这么含糊的 nullability 都推导得出来?!
Parser.kt
18.4 KB
Parser.kt
20.2 KB
移除错误设计的 Until 之前的最后一个版本,我把 Until 的 terminator 也给存下来了……