duangsuse::Echo
https://github.com/itorr/homo/blob/master/homo.js#L1 #JavaScript #code 核心代码,首先我们有一个类似这样的表,eval(xs[i]) == i : ["1", "2"] function divmod(a, b) { return [Math.trunc(a/b), a%b]; } function ordFinder(xs, cmp, is_descending = false) { const sorted = is_descending?…
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse 是什么时候开始这么自由的把流程和数据依赖利用各种闭包拆开 hack 的呢……
这么做的根本原因好像是为了让代码更好看、更有复用性吧
那又是从何时开始注重「好看的代码」了呢……
好像是从不断重写同一段逻辑开始的吧。
那可不可以把同一个算法,利用不同的语言、不同的框架、不同的建模方法和控制流/内存利用实现细节写很多遍呢……
这样的话又会变得奇怪了啊……
这么做的根本原因好像是为了让代码更好看、更有复用性吧
那又是从何时开始注重「好看的代码」了呢……
好像是从不断重写同一段逻辑开始的吧。
那可不可以把同一个算法,利用不同的语言、不同的框架、不同的建模方法和控制流/内存利用实现细节写很多遍呢……
这样的话又会变得奇怪了啊……
除非写 Lisp,我习惯的是让代码从直觉上易于理解。尽量采用语言本身特性,然后从结构角度抽象,尝试简化控制流或者重构,最后再考虑从其他的角度进行抽象。
duangsuse::Echo
除非写 Lisp,我习惯的是让代码从直觉上易于理解。尽量采用语言本身特性,然后从结构角度抽象,尝试简化控制流或者重构,最后再考虑从其他的角度进行抽象。
仅仅简化控制流是不够的,还要顾及数据流。算法虽然主要是「程序」,但它的目标是「数据」。
大佬说 OOP 的 message passing (to receiver) 不如 Haskell 复用性高,我只能说是仁者见仁。 Haskell 可以把数据和算法一起建模但它不像 OOP 有继承和封装,而我说的是“复用性”
大佬说 OOP 的 message passing (to receiver) 不如 Haskell 复用性高,我只能说是仁者见仁。 Haskell 可以把数据和算法一起建模但它不像 OOP 有继承和封装,而我说的是“复用性”
Forwarded from dnaugsuz
特别来给 Rachel 提建议。
首先, print("=== a ===") 可以抽提:
然后, context?.let {...} 可以换成
顺便引一个官方文档: Scope functions
首先, print("=== a ===") 可以抽提:
private fun title(text: String) = println("=== $text ===") 然后, context?.let {...} 可以换成
context?.run {
getSharedPreferences("emm").all.forEach { print("${it.key} ${it.value}") }
}
另外我建议在这种 block 嵌套的情况下使用 for (item in items) 而非 Iterable.forEach 。顺便引一个官方文档: Scope functions
Forwarded from Rachel 碎碎念 (IFTTT)
Kotlin 的语法糖写起来是真的舒服
虽然已经火星很多年
但是毕竟最近才重拾所以 pic.twitter.com/54mzUti90W— Rachel 呱 (@tangrui003) April 3, 2020
虽然已经火星很多年
但是毕竟最近才重拾所以 pic.twitter.com/54mzUti90W— Rachel 呱 (@tangrui003) April 3, 2020
Twitter
Rachel 呱
Kotlin 的语法糖写起来是真的舒服 虽然已经火星很多年 但是毕竟最近才重拾所以
#PL 晚上散步的时候忽然回想到部分绝句设计细节🤔
绝句亮点特性:
逗号表示法、中缀否定、记法、中缀链、人称文法
顺序:
事/回 (回重写、回交)
分支控制流:
若/判 (「判你」 是第二人称)
循环控制流:
重复/对 (「对…里的……」 是第三人称)
停下、略过
第二人称还包括 且/或链
第三人称还包括 中缀链
绝句的 label 定义,对 block 是 ,[] 对控制结构是 对[]
引用则是 [^]
值绑定模式:
常/变/量
只有 量 可以类型推导, 常/变 直接跟后面写类型。
真假 字
字节 短数 数 长数
短实 实
类/物/例
储物 例物 况物 标物
扩物 内物 抽象物
公开 族内 私下 内部
抽象/实现 开放/终定/覆写 记法
晚成
尾递归 断续
绝句亮点特性:
逗号表示法、中缀否定、记法、中缀链、人称文法
顺序:
事/回 (回重写、回交)
分支控制流:
若/判 (「判你」 是第二人称)
循环控制流:
重复/对 (「对…里的……」 是第三人称)
停下、略过
第二人称还包括 且/或链
第三人称还包括 中缀链
绝句的 label 定义,对 block 是 ,[] 对控制结构是 对[]
引用则是 [^]
值绑定模式:
常/变/量
只有 量 可以类型推导, 常/变 直接跟后面写类型。
真假 字
字节 短数 数 长数
短实 实
类/物/例
储物 例物 况物 标物
扩物 内物 抽象物
公开 族内 私下 内部
抽象/实现 开放/终定/覆写 记法
晚成
尾递归 断续
为了吹哨人、发哨人,以及所有为了疫情努力过的人(当然,显然我不包括在其中)
本频道 image 象征性灰今明两天。 #Telegram #China
#Python Pillow:
CMakeLists.txt
本频道 image 象征性灰今明两天。 #Telegram #China
#Python Pillow:
from PIL import ImageOpenCV #CV #Cplusplus:
def grayifyFile(name):
img = Image.open(name)
img.convert("L").save(name.rsplit(".")[0])
grayifyFile("image.png")
#include <cxcore.h>(不是的)
#include <vector>
#include <cv.h>
#include <highgui.h>
#include <errno.h>
#include <dirent.h>
#include <iostream>
#include <queue>
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)gray.c++
project(gray)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} "gray.c++")
target_link_libraries(gray ${OpenCV_LIBS})
#include <cv.hpp>#Kotlin + #java.awt.image:
#include <opencv2/imgproc/imgproc.hpp>
#include <highgui.h>
using namespace cv;
const char* TITLE_GRAY = "Gray Image";
int main() {
namedWindow(TITLE_GRAY, CV_WINDOW_AUTOSIZE);
Mat img = imread("image.jpg");
Mat gray_img; cvtColor(img, gray_img, CV_BGR2GRAY);
imshow(TITLE_GRAY, gray_img); waitKey();
imwrite("image_bw.jpg", gray_img);
return 0;
}
import java.io.File
import javax.imageio.ImageIO
import java.awt.image.BufferedImage
import java.awt.image.RenderedImage
object Img {
@JvmStatic fun main(vararg args: String) {
val image = ImageIO.read(File("image.jpg"))
val image_gray = image.mapPixels(::luma)
image_gray.writeTo("image_bw.jpg")
}
fun BufferedImage.mapPixels(transform: (Int) -> Int): BufferedImage {
val newImg = BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)
for (y in 0 until height)
for (x in 0 until width)
newImg.setRGB(x, y, transform(this.getRGB(x, y)))
return newImg
}
fun RenderedImage.writeTo(path: String) {
ImageIO.write(this, path.substringAfter("."), File(path))
}
/** R * 299/1000 + G * 587/1000 + B * 114/1000 */
//see also https://www.cnblogs.com/bixiaopengblog/p/7462961.html
fun luma(rgb: Int): Int {
val (r, g, b) = unpackRGB(rgb)
val lum = r * 299/1000 + g * 587/1000 + b * 114/1000
return repackRGB(lum, lum, lum)
}
fun repackRGB(r: Int, g: Int, b: Int): Int = (r shl 16) or (g shl 8) or b
fun unpackRGB(rgb: Int): IntArray = intArrayOf(rgb byte 2, rgb byte 1, rgb byte 0)
private infix fun Int.byte(n: Int) = this shr (n*8) and 0xFF
}
Forwarded from dnaugsuz
没有注意到必须有一个栈,而且这个栈还得决定参数得添加到哪个
CallAST.Call 参数列表里,我发现我用 for 的设计就是个错误…… 本来打算快速弄完了的Forwarded from dnaugsuz
构造
看来整个都没有用了,毕竟是递归结构……
我根本不清楚到底要写什么…… 一开始就给整的 generator,我都忘了本来是
Call(callee, param) 的时候突然发现自己扫 callee 的时候没存。看来整个都没有用了,毕竟是递归结构……
我根本不清楚到底要写什么…… 一开始就给整的 generator,我都忘了本来是
# Expr = name '(' Expr {',' Expr}? ')' | name | digits
# predefined names: True, False, Nonecall_syntax.py
3.2 KB
In [4]: parse(tokenize("dsds(True,False,None,dss(232))"))
Out[4]: Call('dsds', [Const(True), Const('False'), Const('None'), Call('dss', [Const(232)])])
又不是不能用(暴论
