dnaugsuz
开始的时候我是误会了 ^ 和 | 的含义,以为 ^ (输入流起始模式, [pattern])一定会匹配的(其实还真不一定... 我真的是糊涂了),所以说 \. 这个单独的 "." 有没有匹配都一样 其实这个正则表达式就是匹配这种模式: 1. <字符串起始> "sspai.com" <字符串结束> 2. ".sspai.com" <字符串结束> 但是我脑子一热就直接说等价 1. <字符串起始> [ "." ] "sspai.com" <字符串结束> 其中,尖括号 <> 包裹的文本是必须出现的文本(…
duangsuse 想着再复习一下使用 #Haskell 编写递归算法
递归算法是相当有用的算法,真的
比如说,你想遍历一个二维矩阵:
[[0,1],[2,3],[4,5]]
首先 this = $0; depth = 1; size = 3
for (i0 in 0..3)
[0,1].printMatrix(0)
[2,3].printMatrix(0)
[4,5].printMatrix(0)
再有一三维矩阵
[
[[0, 1], [2, 3], [4, 5]],
[[2, 3], [4, 5], [6, 7]]
]
for (i0 in 0..2) // depth = 2
for (i0' in 0..3) // d = 1
// print tip matrix
for (i0'' in 0..2)
for (i0'' in 0..2)
for (i0'' in 0..2)
for (i0' in 0..3) // d = 1
// print tip matrix
for (i0'' in 0..2)
for (i0'' in 0..2)
for (i0'' in 0..2)
递归下去,这就完了。 🤔
考虑到新手友好性不写 Haskell,我不会 Scala 也不熟悉 Clojure
我打算顺便练习一下使用
就这样,输出所有组合:
比如说 foldr 操作符
比如,Java 里的
a b 是 HM 的类型变量,类似 Jawa 这种幼儿园语言的泛型
接受
接受
接受
的函数
的函数
用 Kotlin 写就是
当然,GHC 自带类型推导算法,可以推导出 foldr 的类型(Haskell 使用的是 Hindley-Milner 类型系统,可以使用一种 unification 『一致化』算法进行类型推导,我看到了一篇被人抄下来的论文,如果我以后有机会就会实现并讲一下...),后面的定义也很直觉
foldr (+) 0 [1, 2, 3]
= foldr (\x y -> x + y) 0 (1 : 2 : 3 : [])
{- 如果处理列表是空(Nil 构造器),则结果是 v(而 f 的第一个参数就是 x,列表不为空则肯定有一个 x) -}
{- 每次递归都插入一个 f x,f 的第二个参数则要等下一个 xs tail list 的递归完成,最后则够造出类似这样的表达式 -}
= f 1 (f 2 (f 3 (f v)))
\ 是 Haskell 里的 lambda,一个 Lexical Scoping 的匿名函数
递归算法是相当有用的算法,真的
比如说,你想遍历一个二维矩阵:
for (i in 0..m)可是要遍历一个 n 维矩阵,打印出所有项就不行了,虽然不一定是循环做不到的(也可以利用类似 LIFO 栈的结构,是吧,对深度优先搜索、广度优先搜索也是一个道理)
for (j in 0..n)
print(Matrix[i][j])
fun List.printMatrix(int depth)这样,有一二维矩阵:
if (this.size = 0) return
if (depth = 0) this.forEach(::print).also { println() }
for (i0 in 0..this.size)
i0.printMatrix(depth - 1)
[[0,1],[2,3],[4,5]]
首先 this = $0; depth = 1; size = 3
for (i0 in 0..3)
[0,1].printMatrix(0)
[2,3].printMatrix(0)
[4,5].printMatrix(0)
再有一三维矩阵
[
[[0, 1], [2, 3], [4, 5]],
[[2, 3], [4, 5], [6, 7]]
]
for (i0 in 0..2) // depth = 2
for (i0' in 0..3) // d = 1
// print tip matrix
for (i0'' in 0..2)
for (i0'' in 0..2)
for (i0'' in 0..2)
for (i0' in 0..3) // d = 1
// print tip matrix
for (i0'' in 0..2)
for (i0'' in 0..2)
for (i0'' in 0..2)
递归下去,这就完了。 🤔
考虑到新手友好性不写 Haskell,我不会 Scala 也不熟悉 Clojure
我打算顺便练习一下使用
Text.ParserCombinators.ReadP 来解析文本结构,得出 datatype就这样,输出所有组合:
(a|b)c输出列表: ["ac", "bc"]
c(d|e)输出列表:["cd", "ce"]
a(b|c)de(f|g)h输出列表
[Haskell 真的是一门不错的语言,如果可以的话,它真的最好诠释了 JetBrains MPS 的『面向语言编程』 — 最直白的表示形式给你最好的直觉
"abdefh",
"abdegh",
"acdefh",
"acdegh"
]
比如说 foldr 操作符
foldr :: (a -> b -> b) -> b -> ([a] -> [b])
foldr f v [] = v
foldr f v (x : xs) = f x (foldr f v xs)
:: 意味着『has type』 #Learn() 就是普通的『数学上的括号』,它改变操作符结合性,使得 (1 + 1) * 2 可以等于 4 (而不是 1+(1*2) = 3)-> 是 Haskell 的函数类型中缀构造器,它创造一个一元函数(单输入单输出,可以进行柯里化方便函数式箭头操作)比如,Java 里的
Integer.parseInt,用上面的表达方法可以是:Integer.parseInt :: java.lang.String -> java.lang.Integer
那么 (a -> b -> b) 就是说一个函数,接受一个 a 类型的参数,返回一个函数,它接受一个 b 类型的参数,返回一个 b 类型的实例(左结合)a b 是 HM 的类型变量,类似 Jawa 这种幼儿园语言的泛型
foldr :: (a -> b -> b) -> b -> ([a] -> [b])
就是说 foldr 是一个:接受
((a -> b) -> b) 这一函数类型,返回接受
b 类型,返回接受
List a 类型,返回 List b 类型实例的函数的函数
的函数
用 Kotlin 写就是
fun <A, B> foldr(f: (A) -> (B) -> B, v: B): (List<A>) -> List<B>
可见 Type variable 和泛化类型还是很相似的(当然,GHC 自带类型推导算法,可以推导出 foldr 的类型(Haskell 使用的是 Hindley-Milner 类型系统,可以使用一种 unification 『一致化』算法进行类型推导,我看到了一篇被人抄下来的论文,如果我以后有机会就会实现并讲一下...),后面的定义也很直觉
foldr f v [] = v
foldr f v (x : xs) = f x (foldr f v xs)
想象一下,这就是一个『插入』操作符,foldr (+) 0 [1, 2, 3]
= foldr (\x y -> x + y) 0 (1 : 2 : 3 : [])
{- 如果处理列表是空(Nil 构造器),则结果是 v(而 f 的第一个参数就是 x,列表不为空则肯定有一个 x) -}
{- 每次递归都插入一个 f x,f 的第二个参数则要等下一个 xs tail list 的递归完成,最后则够造出类似这样的表达式 -}
= f 1 (f 2 (f 3 (f v)))
\ 是 Haskell 里的 lambda,一个 Lexical Scoping 的匿名函数
List 可以这么理解data List' a = Cons a (List' a) | Nil或者说
data List a where多看看就理解了... 虽然还有很多不说🤔
Cons :: a -> List a -> List a
Nil :: List a
infixl 3 :->
(:) = Cons
[] = Nil
GitHub
antlr/grammars-v4
Grammars written for ANTLR v4; expectation that the grammars are free of actions. - antlr/grammars-v4
#ce #huawei #China 我支持,因为我之前听说过华为开发过 x86 机子的 ARM -> x86 翻译器(据说),用以支持 x86 机器上的 ARM + AndroidABI JNI 代码运行,总的来说,我还是相信华为作为中国大通讯企业的技术水平的,也衷心希望华为后面的技术人员能不断突破极限,早日造出真正 PC/智能手机能用的微处理器
至于前面的(比如,EMUI 的工程人员),我觉得,EMUI 的 bootanimation 二进制文件真的是无法优化了吗?我觉得还不如 flyme 的流畅
动画做得还不错,内定应用和服务感觉勉强(虽然有些功能也有点简陋、有些属于得之无味弃之可惜,比如蛤为音乐 vs 网易云音乐)
而且那个机子配置(v8 青春版)真的不算低...
至于前面的(比如,EMUI 的工程人员),我觉得,EMUI 的 bootanimation 二进制文件真的是无法优化了吗?我觉得还不如 flyme 的流畅
动画做得还不错,内定应用和服务感觉勉强(虽然有些功能也有点简陋、有些属于得之无味弃之可惜,比如蛤为音乐 vs 网易云音乐)
而且那个机子配置(v8 青春版)真的不算低...
Forwarded from LetITFly 让技术飞
#Go #Qt #Cplusplus 🤔 让我想到了
int main(int argc, char **argv) { QApplication app(argc, argv); return app.exec(); }有时候想到一些莫名崇拜水果 #apple 的人,再想到 Steve Jobs 创造 #GUI 这个被人津津乐道的故事,我觉得虽然乔布斯很伟大,但不应该说发明了 GUI 的灵感很不得了,因为早些时候还没有麦金塔就有了各种有『GUI』的 Video game,或者至少,有 M$ 的 edit 程序(TUI 程序,除了没有窗口概念,其他都很类似了,这很容易理解,因为文本编辑器看起来就该这样交互(不过 vi 却不是这样的,大概是风格不同吧... 但是,文本编辑器这种东西对字符终端的空间利用方式已经可以启发类似 Markdown、GUI、HTML 这些东西了),再稍微改造一点 GUI 就出现了,当时监视器、键盘都有了,这不是多么不容易的灵感),我觉得 GUI 的创立即使没有乔布斯的打算也只是迟早的事情,不如设计出魔方更有难度
Forwarded from Genteure's Window
https://t.me/haneko_daily/1368
我一阵子之前做过测试,设计挺美好,实际效果挺一般。
在 Ubuntu Bash XShell 下效果如图
印象中我本地 Windows 10 PowerShell 也有问题,但是记不清具体是什么问题了。
我一阵子之前做过测试,设计挺美好,实际效果挺一般。
在 Ubuntu Bash XShell 下效果如图
印象中我本地 Windows 10 PowerShell 也有问题,但是记不清具体是什么问题了。
.... #Docker 本身就不是多么不得了的,比起之前那些 Linux LiveCD 打包工具,只是补了个缺口而已... 也有人用几百行 Bash "Bocker" 实现了它的主要功能... 它的 DSL 几乎也可以说就是个象征性的 DSL 而已,没啥实际功能,也很久没有引入能被广泛使用的新概念... 算是『容器化』理念的,,,, 呃,,,
Forwarded from 小娜晚报 (XnzKKi RGB)
bilibili后台工程源码被开源,各种吃瓜🤔
Forwarded from Android Repository (『 ⴼITⵠLØ 』)
bootanimation_androidQ.zip
2.3 MB
另外你也可以使用 Java 8 的 Lambda 语法糖,看起来这是个 SAM(Single Abstract Method) 开放类,可以这么写
private static final Migration MIGRATION = new Migration(12, 13);
.... 好吧是我看错了,好像不能.... (刚才准备发 Yuuta 的,可是发现是自己错的)
private static final Migration MIGRATION = new Migration(12, 13);
.... 好吧是我看错了,好像不能.... (刚才准备发 Yuuta 的,可是发现是自己错的)
#Java 我好绝望啊,Java 又得重新学了,我容易吗我... 😭
https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4#L1042
Jawa 8 啥时候又多了这种语法,我怎么就不知道呢?
block : '{' blockStatements? '}';
blockStatements : blockStatement+;
blockStatement : ... | statement;
statement : ... | returnStatement;
returnStatement : 'return' expression? ';';
statementExpression : ... | classInstanceCreationExpression;
classInstanceCreationExpression : ... | expressionName '.' 'new' typeArguments? annotation* Identifier typeArgumentsOrDiamond? '(' argumentList? ')' classBody?
matches
'.' 'new'
typeArguments=null annotation=[]
Identifier="Package"
typeArgumentsOrDiamond=null
'('
argumentList?=Some([])
')'
classBody?=Some(...)
Qualified class instance creation expressions begin with a Primary expression or an ExpressionName.
A qualified class instance creation expression enables the creation of instances of inner member classes and their anonymous subclasses.
看来我不够了解 Java,垃圾 duangsuse... 🌶🐔
为什么...
1.3: Plain Old Java (2000)
1.4:
5: Autoboxing,
6:
7: ARM, Diamond, multi-catch (2011)
8: Lambda and Type annotations (2013)
9: Modules,
10: Local variable inference (2018)
11: Local variable syntax for lambda parameters (2018)
啥时候 Java 8 我认不得了
https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4#L1042
Jawa 8 啥时候又多了这种语法,我怎么就不知道呢?
public ResourceTable.Package parsePackage(final ResourceTable table) throws IOException {
return table.new Package() {...};
methodBody : block| ';'block : '{' blockStatements? '}';
blockStatements : blockStatement+;
blockStatement : ... | statement;
statement : ... | returnStatement;
returnStatement : 'return' expression? ';';
statementExpression : ... | classInstanceCreationExpression;
classInstanceCreationExpression : ... | expressionName '.' 'new' typeArguments? annotation* Identifier typeArgumentsOrDiamond? '(' argumentList? ')' classBody?
matches
table.new Package() {...}
expressionName="table"'.' 'new'
typeArguments=null annotation=[]
Identifier="Package"
typeArgumentsOrDiamond=null
'('
argumentList?=Some([])
')'
classBody?=Some(...)
Qualified class instance creation expressions begin with a Primary expression or an ExpressionName.
A qualified class instance creation expression enables the creation of instances of inner member classes and their anonymous subclasses.
看来我不够了解 Java,垃圾 duangsuse... 🌶🐔
为什么...
1.3: Plain Old Java (2000)
1.4:
assert keyword (2002)5: Autoboxing,
enum, generics (2004)6:
@Override in interfaces (2006)7: ARM, Diamond, multi-catch (2011)
8: Lambda and Type annotations (2013)
9: Modules,
private fields in interfaces (2017)10: Local variable inference (2018)
11: Local variable syntax for lambda parameters (2018)
啥时候 Java 8 我认不得了
duangsuse::Echo
#Java 我好绝望啊,Java 又得重新学了,我容易吗我... 😭 https://github.com/antlr/grammars-v4/blob/master/java8/Java8.g4#L1042 Jawa 8 啥时候又多了这种语法,我怎么就不知道呢? public ResourceTable.Package parsePackage(final ResourceTable table) throws IOException { return table.new Package() {...};…
This media is not supported in your browser
VIEW IN TELEGRAM
原来世界上最合格的 #Java 程序员是 James 老爹,我都不知道 Java 8 啥时候支持
new List(oldid = id) 这种了... 我只知 Lambda
duangsuse::Echo
原来世界上最合格的 #Java 程序员是 James 老爹,我都不知道 Java 8 啥时候支持 new List(oldid = id) 这种了... 我只知 Lambda
This media is not supported in your browser
VIEW IN TELEGRAM