duangsuse::Echo
718 subscribers
4.26K photos
130 videos
583 files
6.48K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
思维江化,无法和曾经费了很长时间想的模型对应起来。
想到了,原来我让 next() 去回 lastItem,然后 [1, 2, 3] 第一次 lastItem=1;next 流就是 [1,2,3],比之前 constructor: lastItem=gen.next() 多 next 一次是为了 next 出所有项目包括 peek 的。
而现在的 peek 实际上更加直白,就是让 iterator 把那个直接补回去,不必再用 tailConsumed 那一套 peek+yield in next 修补方案了,也没有 tail 需要特殊处理的问题。
ES6 的版本
class SaveIterator {
constructor(gen) {
this.gen = gen;
this.res0 = gen.next();
this.lastItem = this.res0.value;
}
*iterator() {
if (this.res0.done) return;
yield this.lastItem;
for (let item of this.gen) {
this.lastItem = item;
yield item;
}
this.lastItem = undefined;
this.res0.done = true; //no next
}
[Symbol.iterator] = this.iterator;
}
let b = new SaveIterator([1,2,3].values())
[...takeWhile(x => x < 3, b)] //Array [ 1, 2 ]
b.lastItem //3
[...takeWhile(x => x <= 3, b)] //Array [ 3 ]
b.lastItem //undefined
这样的代码可以解析如上模式
Section = literateBegin (anyElement|Example)*? literateEnd
Example = exampleBegin anyElement*? exampleEnd
其实应该使用组合函数解析器的……
duangsuse::Echo
😂 Sticker
简直莫名其妙,我不是要写 Kotlin 文章的,怎么开始写起这个来了……
算了不要什么 exampleBegin 了,真是无聊。
暂时没简化 document.createElement 什么的,大家不喜勿喷。
其实 ES6 也不是不能简化 DOM 树/Event 的构建/操作,而且还很有效,可我暂时不想再设计,毕竟无关痛痒。
能用了但我莫名觉得写得好不爽啊 🤪
今天有点晚了就写不了那个关系式的了…… 但愿明天,还有为了绝句成功完成必须的 Literate Kotlin 项目生成软件能正常写出来。

fun <V, K> Iterable<V>.hist(key: (V) -> K): Map<K, List<V>> {
val histogram: MutableMap<K, MutableList<V>> = mutableMapOf()
for(item in this) histogram.getOrPut(key(item), ::mutableListOf).add(item)
return histogram
}

listOf(1, "abc", "emmm", -1)
[1, abc, emmm, -1]
listOf(1, "abc", "emmm", -1).hist { it::class }
{class kotlin.Int=[1, -1], class kotlin.String=[abc, emmm]} #Kotlin

先修补下找出,绝句这几天就完善了『第一人称』『第二人称』『第三人称』和中缀链、基本语法模型。

剧透一下,那个关系式的 最后总结有 6 个基本元素:State, Variable, Introduce, Eq, Either, Both
<div class="literateBegin" id="input-impl"></div>
<div class="literateBegin" depend="input-impl"></div>

现在可以这么写了。我艹,原来 exampleBegin 什么的都是过度设计,section 依赖才是真理啊! #Kotlin
还是只有 literateBegin / literateEnd,可是却可以随便写 example,而且兼容独立按 md 文件单元编译的 standalone tool,还真是蛮 effective,适合我这种菜鸡。
突然觉悟我这个其实写错了啊!它既不是 peek 也不是 lastItem/consume!
peek 的肯定是 next 啊!可是这个只有第一个的 peek 是 next,其他的都是 lastItem…… 所以说 iterator 里应该是 yield lastItem 的,然后取下一个 lastItem。

而我要的其实不必真的 peek,lastItem/consume 就足够了,而且用 peek 的话 takeWhile 等函数式流操作依然要重写。
duangsuse::Echo
我来谈谈 Literate Kotlin 的脚本应该怎么写。 #JavaScript 这个脚本,就是要允许我们在文章里嵌入 Kotlin 代码和依赖代码的示例, 然后每个相对独立且可以作为 Kotlin File 编译的部分完成后,显式一个按钮以归总一个部分的代码,并允许在 Kotlin Playground 执行它。 (感谢 JetBrains 特地包装的这个编辑器,使用一点也不困难,尽可能减少了我在无意义事情上花费的时间和痛苦) 至于 Kotlin Playground 的部分他们提供了很简单的 API:…
现在我有了一个更好的思路解决,也就可以写 example 了。
就是『我的 literate 的 literate 不是我的 literate』,我们认为 (literateBegin (literateBegin ... literateEnd) ... literateEnd) 里层的 (begin...end) 不被外部建项工具和 literate_kt.js 提取

然后就可以用 depend="parent_id" 直接去加隐式依赖就好了,反正每个 begin end 后都有 [Kotlin Code] 按钮的。

<div class="literateBegin" id="emmm"></div>
<div class="literateEnd"></div>

<div class="literateBegin" id="wmmm"></div>

<div class="literateBegin" depend="emmm wmmm"></div> <!--inner literate-->
<div class="literateEnd"></div>

<div class="literateEnd"></div>


实现的模式是这样的:

Literate = <div class="literateBegin *"></div>
(<*> | Literate)*?
<div class="literateEnd *"></div>
我简直失了智了 #JavaScript #ES6