/tmp/duangsuse.sock
23 subscribers
303 photos
3 videos
92 files
337 links
从 duangsuse::Echo (@dsuse) 跟进出来的分支,将在作者恢复原帐号访问的时候合并删除。
Download Telegram
Forwarded from ℤeeko ℤhu
我见过还有洗衣机洗篮球的
Forwarded from Deleted Account
有没有拿洗衣机把白拖布和篮球和🐓一起洗掉的
Forwarded from ℤeeko ℤhu
画面太美,不敢想象
Forwarded from Deleted Account
但是洗衣机坏了,因为里面又唱又跳的……
湖北卖1块1个的被处罚了(
Forwarded from Deleted Account
啊,那么严厉啊
最高要求5毛一个?
严厉个P,找软柿子捏
Forwarded from Catten Linger
然后中央 2 块一个?
Forwarded from Deleted Account
口罩不能捐给红十字会!
口罩不能捐,给红十字会!
Forwarded from Deleted Account
This media is not supported in your browser
VIEW IN TELEGRAM
java.lang.NullPointerException
at NumUnitTrie.getMap(Parser.kt:1199)
at NumUnitPattern.<init>(Parser.kt:1193)
at NumUnitTrie.<init>(Parser.kt:1198)
#Kotlin 原来 Kotlin 里一个 superclass 的 <init> 不能访问到子类的 constructor override val
val n=RepeatUn(asInt(), digitFor('0'..'9')) { it.toString().map { it-'0' } }
val u=KeywordPattern<Int>().apply { mergeStrings("s" to 1, "min" to 60, "hr" to 60*60) }
val k=NumUnitTrie(n, u, IntOps)


我写完了 NumUnits
This media is not supported in your browser
VIEW IN TELEGRAM
/tmp/duangsuse.sock
val n=RepeatUn(asInt(), digitFor('0'..'9')) { it.toString().map { it-'0' } } val u=KeywordPattern<Int>().apply { mergeStrings("s" to 1, "min" to 60, "hr" to 60*60) } val k=NumUnitTrie(n, u, IntOps) 我写完了 NumUnits
我来说说,这 1hr1min1s三千五百万 有啥区别。
1hr1min1s 是累加、三千五百万是更复杂的折叠,因为汉字每个子意群都得带单位。
单位上升(“五百万”)的时候是乘,单位下降(“三千一百”)的时候是加,其实不必递归。

汉字没有 123 这种直接的数字(都是一百二十三)所以一个单位的显示还得递归地去做。
这个 show,不需要区分仅个位或大于十的情况,直接交给能输出数字的子程序即可。

NumUnit 已经做好了这一点,可它做不到最大单位也无法仅含个位情况下的递归输出。
而且如果 units 规则指定不对(间隔没在进制以内),也可能出现非仅存个位的情况,不过我觉得我不会出这个问题

关键是对于任何一位的内部数字显示,都必须是递归的…… 这一点我还没有打算

汉字的特例也就是 10 until 20 的 “十一” “十二” 无需带单位的情况了,这种情况下“十”作为数字起始部分特殊处理
还有 一千零一,如果两个单位之间不止差一个阶层就得加“零”,这个我还没想好
欸我有了一个主意,ParserKt 的 number show 可以基于 unfold 的去做,那么这个 toString 的流程是可以随便指定的
只要我能够 lateinit var 引用 numUnit 的实例,就可以做到递归 show 出汉字单位前的数值了
val hanDigit = MapPattern(mapOf(
*"一二三四五六七八九".asIterable().zip(1..9).toArray())
)
val hanUnit = KeywordPattern<Int>().apply {
mergeStrings("" to 1, "十" to 10, "百" to 100)
mergeStrings("千" to 1000, "万" to 10000)
}


>>> val k=NumUnitTrie(hanDigit, hanUnit, IntOps)
>>> k.read("一百一十")
res31: kotlin.Int? = 110
>>> k.read("一百一十一")
res32: kotlin.Int? = null
>>> k.rebuild("一百一十")
res33: kotlin.String? = 一百一十
哈,可是碰到 “三十二万” 就犯难了