Forwarded from duangsuse Throws
Forwarded from duangsuse Throws
#School 这周马上就要放寒假了(还有一个月) 🤔
duangsuse 的安排嘛... 其他的都好了,本来每周就是讲东西为主,然后本周买了别的东西,画了几张画,最后书什么的基本没看。嗯嗯。
这周就是讲点东西,发点照片,没了。
顺便说一下,推荐有打印机又看过书的大家可以没事带几张 papper (比如之前那个代数程序逻辑的 fold.pdf,我在 USTC 中科大学生的分享里淘到的,当然论文基本都是公开的你们可以随便找个大学比如 Illinois 的 CS 系看...)到例如公交车的地方看看,因为我觉得吧,公交车之类的地方可能思维都比较开放一些,学习起来比较有效果,可惜就是很慢就是了
至于我上面提到的 papper A tutorial on the universality and expressiveness of fold 可以在 这里(Nottingham in UK 大学)下载 #papper #FP #CS
个人觉得... 虽然有些不常见的词,但是有一定函数式编程和程序分析变换、形式化证明基础的人虽然可能看很久但收获不错。
见好就收。
duangsuse 的安排嘛... 其他的都好了,本来每周就是讲东西为主,然后本周买了别的东西,画了几张画,最后书什么的基本没看。嗯嗯。
这周就是讲点东西,发点照片,没了。
顺便说一下,推荐有打印机又看过书的大家可以没事带几张 papper (比如之前那个代数程序逻辑的 fold.pdf,我在 USTC 中科大学生的分享里淘到的,当然论文基本都是公开的你们可以随便找个大学比如 Illinois 的 CS 系看...)到例如公交车的地方看看,因为我觉得吧,公交车之类的地方可能思维都比较开放一些,学习起来比较有效果,可惜就是很慢就是了
至于我上面提到的 papper A tutorial on the universality and expressiveness of fold 可以在 这里(Nottingham in UK 大学)下载 #papper #FP #CS
个人觉得... 虽然有些不常见的词,但是有一定函数式编程和程序分析变换、形式化证明基础的人虽然可能看很久但收获不错。
见好就收。
#Machl #AI 非常希望去学习一些自然语言处理和机器学习相关的技术
至于面向 Compiler 技术向的解析技术,我也不甚了解,我没写过 ANTLR,不知道 LALR、LL、LR 解析算法是怎么执行的,不知道自底向上分析和自底向下推导的区别,不了解 PCRE Regex 匹配算法,不清楚 infix operator 们的优先级和结合性的问题,
#parser #NLP 至于自然语言处理(NLP),我发现因为可能是考虑过一个比较有幼稚 niave 的梦想『Semic 机器人』的原因,我对结构化自然语言还有点直觉
但是我不是特别了解自然语言,也不了解音标记法(当然不是一个层面的东西)
我觉得这个可以考虑多去分析一些小说什么的来提升
至于机器学习,我看过冰封他学姐写的博文,虽然因为我完全没有 ANN(人工神经网络)和机器学习的基础(其实我有一点 KNN 回归量化评估分析的基础,《算法图解》看的)(数学上,我们最近高二也在上回归,不过和 KNN 那种简单的回归而不是函数回归没有特别大的关系)
理解非常的困难,我不知道啥是 Layer、不知道啥是导数、不知道啥是反向传播啥是 bootstrap 函数,但幸亏我有函数式的基础,所以
(事实是,很多(尤其是对于一些比较 trivial 的业务范围,比如 #Android 开发和 #Web 前端来说)工业界的程序员压根不能理解 FP 范式的一些东西,或者使用的理解式变通太多了,以至于直觉不太好)
比如说这个 Haskell 里一些 function 扩展和 Monad 们的 Kotlin 版本,大家可以看看自己看不看得懂(挫败感?
想必很多不是特别熟悉 Kotlin,而只是把 Kotlin 写成 Java (甚至 Java 7 而不是 8)的程序员要开始烧脑一战了(
至于面向 Compiler 技术向的解析技术,我也不甚了解,我没写过 ANTLR,不知道 LALR、LL、LR 解析算法是怎么执行的,不知道自底向上分析和自底向下推导的区别,不了解 PCRE Regex 匹配算法,不清楚 infix operator 们的优先级和结合性的问题,
infixl infilr 傻傻分不清(几乎)#parser #NLP 至于自然语言处理(NLP),我发现因为可能是考虑过一个比较有幼稚 niave 的梦想『Semic 机器人』的原因,我对结构化自然语言还有点直觉
但是我不是特别了解自然语言,也不了解音标记法(当然不是一个层面的东西)
我觉得这个可以考虑多去分析一些小说什么的来提升
至于机器学习,我看过冰封他学姐写的博文,虽然因为我完全没有 ANN(人工神经网络)和机器学习的基础(其实我有一点 KNN 回归量化评估分析的基础,《算法图解》看的)(数学上,我们最近高二也在上回归,不过和 KNN 那种简单的回归而不是函数回归没有特别大的关系)
理解非常的困难,我不知道啥是 Layer、不知道啥是导数、不知道啥是反向传播啥是 bootstrap 函数,但幸亏我有函数式的基础,所以
fun Scale(d: Weight) = { lf: LossFunction -> { w: Weight -> d * lf(w) } } 这种 FP 风格的 #Kotlin 代码我至少还不至于看不懂,给我尝试去理解这类玩意创造了一个最基本的条件 — 如果你连别人说啥都搞不懂,怎么 get 得到知识点呢?(事实是,很多(尤其是对于一些比较 trivial 的业务范围,比如 #Android 开发和 #Web 前端来说)工业界的程序员压根不能理解 FP 范式的一些东西,或者使用的理解式变通太多了,以至于直觉不太好)
比如说这个 Haskell 里一些 function 扩展和 Monad 们的 Kotlin 版本,大家可以看看自己看不看得懂(挫败感?
fun <T : Any> T?.toMaybe() = this?.let(::Some) ?: None
尤其是最后那个 #FP CoinductiveList,我也是最近才理解,而这个 fibonacci Sequence 才是最骚的(也很能体现一个 CS lover 的水平 — 你究竟只能算是『工程师』还是能算是『爱好者』呢?):fib = 1 : 2 : zipWith (+) fib (tail fib)(这里是有限构造的 List,不是 Coinductive 的,虽然 Haskell 是 Built-in Laziness 所以可以当成是 Coinductive 的,对应到 Kotlin 就是 Kotlin std 的 Sequence)
Prelude> take 10 fib
[1,2,3,5,8,13,21,34,55,89]
-- 数学定义
fib' 1 = 1
fib' 2 = 2
fib' n = fib (n - 1) + fib (n - 2)
想必很多不是特别熟悉 Kotlin,而只是把 Kotlin 写成 Java (甚至 Java 7 而不是 8)的程序员要开始烧脑一战了(
GitHub
ice1000/Ruiko.kt
Kotlin version of Ruiko.fs. Contribute to ice1000/Ruiko.kt development by creating an account on GitHub.
#CSharp 好像早就有了啊,Java 的 TryWithResource(
下面那个我觉得好像
至于
有点类似于 Haskell 里的 Map(?其实是
好像没有
这里
递归数据类型。看不懂的复习一下二叉树。OI 基础内容
举个例子,一个字符串二叉树,假设我们是在做一个计算器(因为这个例子很常见)
Closeable)不就是和 CSharp 学的吗?下面那个我觉得好像
class T 可以改成这样(个人看法,程序逻辑不等价class CouterEnumeratorExample {
private int _counter = 0;
public CounterEnumeratorExample() {}
public int Current => _counter;
public bool moveNext() {
return ++_counter < 5;
}
public CouterEnumeratorExample GetEnumerator() => this;
}
(++_counter < 5) 的修改会让 enumerable 的 Current 值(也即 forEach 的 application 参数范围)范围在 0..4 (也即 (0, 5]) 区间内,_counter 的范围在 0..5 的区间内至于
moveNext() 返回 false 之后 _current 我觉得就是没有必要检查其值的,反正 Enumerator 就是用来枚举 Travelse 的有点类似于 Haskell 里的 Map(?其实是
Data.Travelsable 不过我因为比较入门所以太关心广义的 map 操作了好像没有
instance Functor(其实是我误会了... (其实是我不够了解 Haskell...),但是有 mapM(onad) 可以用-- class (Functor t, Foldable t) => Traversable t上面的代码 [origin] 实现了对二叉树(Binary Trees)的前序遍历(先访问左子节点、再是本节点、再是右子节点)(当然 Tree 还不是 Functor,没有实现 fmap 所以上面的代码不是拿来运行的,我也懒得补写)(其实是不会写,跑)
data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a)
instance Traversable Tree where
traverse f Empty = pure Empty
traverse f (Leaf x) = Leaf <$> f x
traverse f (Node l k r) = Node <$> traverse f l <*> f k <*> traverse f r
import Control.Applicative它是说这必须是顺序调用,不能瞎 Lazy(Sequential application)
(<*>) :: f (a -> b) -> f a -> f b
这里
f 是一个 Functor
#Haskell #Learn 给一些还完全不会 Haskell 的人科普一下(虽然我也不会data Tree a是一个类型(
Tree a),a 可以理解为类型参数(泛型)Empty是一个 无参架构器 Empty
Lea
f a 是一个包含 a 类型数据的架构器 LeafNode (Tree a) a (Tree a) 是包含左右两个 Tree a 类型『子树』和本节点数据的架构器 Node递归数据类型。看不懂的复习一下二叉树。OI 基础内容
举个例子,一个字符串二叉树,假设我们是在做一个计算器(因为这个例子很常见)
type String = List Char
type StringTree = Tree String
tree0 = Empty
tree1 = Node (Leaf "1") "+" (Leaf "1")
tree2 = Node (Node (Leaf "2") ">" Leaf "1") "<" (Node Leaf "1" "+" Leaf "1")
tree3 = Node Empty "||" Leaf "10"
我们可以(eval 求值函数就不写了,虽然写出来也不是多长)(看这里)class (Functor t, Foldable t) => Traversable t(好吧,我不熟悉 Haskell,我下次学...)
traverse :: Applicative f => (a -> f b) -> t a -> f (t b)
printBinaryTree bt = traverse print
duangsuse::Echo
#CSharp 好像早就有了啊,Java 的 TryWithResource(Closeable)不就是和 CSharp 学的吗? 下面那个我觉得好像 class T 可以改成这样(个人看法,程序逻辑不等价 class CouterEnumeratorExample { private int _counter = 0; public CounterEnumeratorExample() {} public int Current => _counter; public bool moveNext()…
#recommended 所以说,Haskell 应该怎么写???
Haskell 不是拿来写 HelloWorld 这种简单到不要不要的程序的,也不是拿来用 Guard Pattern、List Comprehension
Haskell、Scala、Scheme、CoffeeScript 之类的 FP 语言不是让人拿来写一点
对于优秀的程序员来说 FP 既不应该是『可望可谈而不可及』的白象也不应该是非常表面的一些东西(比如单纯字面上的『本本主义者』什么纯函数啊、什么递归替代循环啊、什么惰性求值模式匹配啊),FP 爱好者们应该从程序们里面看到一种... 一种... 思考的快乐?这是很多『称职』的工程师们做不到的 — 对他们来说这是『头疼』
FP 不应该是什么头衔,不要拿它去做什么非常功利的事情,我想没有人想东施效颦或者当什么演员
真正的 FP 爱好者,他们从来都不会去谈自己喜欢 FP、FP 基本特色这类非常 trivial 的事情,技术水平都是非常自然的从自己的代码和讨论里流露出来的
一上 Haskell 至少是
当然不能说 FP 或者 OOP 都是拿来表示一切的,都有各自擅长的领域,比如 FP 要拿来写 Android 应用可能就有点高射炮打蚊子的意思了(可能根本用不到啥好玩的特性,写不出多好看的程序来,一大堆
有的时候就是这样的,OOP 是表述式,FP 是定义式的风格,二者各自适合不同的程序,定义式有些情况下表述程序起来比较不方便
(偶尔想说一些这样的东西,但其实我不是特别了解所以把握不好,get 到我的意思就好了(请,emmmmm.....
Haskell 不是拿来写 HelloWorld 这种简单到不要不要的程序的,也不是拿来用 Guard Pattern、List Comprehension
[x * 2 | x <- l, isOdd x] 这种简直语法糖的东西的,这种事情应该留给 JavaScript 这种工业界常用的语言去做Haskell、Scala、Scheme、CoffeeScript 之类的 FP 语言不是让人拿来写一点
(for-each ...) 的,实际上单单就 FP 编程,不包含一些更高更开阔的视角,至少 Y 组合子得会定义,并且简单的递归程序,比如 filter、dropWhile 得会写对于优秀的程序员来说 FP 既不应该是『可望可谈而不可及』的白象也不应该是非常表面的一些东西(比如单纯字面上的『本本主义者』什么纯函数啊、什么递归替代循环啊、什么惰性求值模式匹配啊),FP 爱好者们应该从程序们里面看到一种... 一种... 思考的快乐?这是很多『称职』的工程师们做不到的 — 对他们来说这是『头疼』
FP 不应该是什么头衔,不要拿它去做什么非常功利的事情,我想没有人想东施效颦或者当什么演员
真正的 FP 爱好者,他们从来都不会去谈自己喜欢 FP、FP 基本特色这类非常 trivial 的事情,技术水平都是非常自然的从自己的代码和讨论里流露出来的
一上 Haskell 至少是
fib = 1 : 2 : zipWith (tail fib) 这种级别,要不然还是 Java 之类简单的语言靠谱,或者混合 Kotlin 也行当然不能说 FP 或者 OOP 都是拿来表示一切的,都有各自擅长的领域,比如 FP 要拿来写 Android 应用可能就有点高射炮打蚊子的意思了(可能根本用不到啥好玩的特性,写不出多好看的程序来,一大堆
do notation,函数式平时的感觉和定义式风格都没有了)有的时候就是这样的,OOP 是表述式,FP 是定义式的风格,二者各自适合不同的程序,定义式有些情况下表述程序起来比较不方便
(偶尔想说一些这样的东西,但其实我不是特别了解所以把握不好,get 到我的意思就好了(请,emmmmm.....
#SQL 我跟你们讲啊,我之前连 SQL
Python:
这不是个好例子,不过我很随意的.... 😕
JOIN 都不知道是在求并集的意思(...Python:
land = set(['rabbit', 'bear', 'duck', 'polebear'])
sky = set(['duck', 'swan'])
print(land & sky)
btw. 陆生 = Terrestrial这不是个好例子,不过我很随意的.... 😕
Forwarded from 羽毛的小白板
duangsuse::Echo
#recommended 所以说,Haskell 应该怎么写??? Haskell 不是拿来写 HelloWorld 这种简单到不要不要的程序的,也不是拿来用 Guard Pattern、List Comprehension [x * 2 | x <- l, isOdd x] 这种简直语法糖的东西的,这种事情应该留给 JavaScript 这种工业界常用的语言去做 Haskell、Scala、Scheme、CoffeeScript 之类的 FP 语言不是让人拿来写一点 (for-each ...) 的,实际上单单就…
望着正在折腾 BrainFuck 的大佬
我可以很自豪的说,虽然我很菜,但是我至少能理解能学会很多东西了,而且不只是很泛泛地去学。
我缺少的是时间的付出,而不是硬性的智商捉鸡。
就比如说低从 BF 到高到偏序理论、形式化验证程序逻辑、机器学习::人工神经网络,我都可以看到自己对他们的理解程度并且知道如何继续学下去
到工业界的那些东西,也是一样,实际上我的实际应用编程会被我抽象成使用某些接口,基元操作的组合程序,用户界面交互、网络和序列化 IO 也会被我抽象成 PL 里面那些东西,这样思考时会方便一些
我刻意地为 AOP 进行优化,让应用变得可扩展而对程序员有趣味
这样的设计是模块化的,可细分的,而且我也再没出现过写不出代码的情况,先完成小目标,再回来去考虑大目标需要什么,不会呆在那里原地不动去想该如何开始
我可以很自豪的说,虽然我很菜,但是我至少能理解能学会很多东西了,而且不只是很泛泛地去学。
我缺少的是时间的付出,而不是硬性的智商捉鸡。
就比如说低从 BF 到高到偏序理论、形式化验证程序逻辑、机器学习::人工神经网络,我都可以看到自己对他们的理解程度并且知道如何继续学下去
到工业界的那些东西,也是一样,实际上我的实际应用编程会被我抽象成使用某些接口,基元操作的组合程序,用户界面交互、网络和序列化 IO 也会被我抽象成 PL 里面那些东西,这样思考时会方便一些
我刻意地为 AOP 进行优化,让应用变得可扩展而对程序员有趣味
这样的设计是模块化的,可细分的,而且我也再没出现过写不出代码的情况,先完成小目标,再回来去考虑大目标需要什么,不会呆在那里原地不动去想该如何开始
Codewars
BF basics #4: Sort the input
Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest potential.
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse Throws
#School 这周马上就要放寒假了(还有一个月) 🤔 duangsuse 的安排嘛... 其他的都好了,本来每周就是讲东西为主,然后本周买了别的东西,画了几张画,最后书什么的基本没看。嗯嗯。 这周就是讲点东西,发点照片,没了。 顺便说一下,推荐有打印机又看过书的大家可以没事带几张 papper (比如之前那个代数程序逻辑的 fold.pdf,我在 USTC 中科大学生的分享里淘到的,当然论文基本都是公开的你们可以随便找个大学比如 Illinois 的 CS 系看...)到例如公交车的地方看看,因为…
#emmm 这周我发的一些东西... 因为都是『超常发挥』(其实都是我不了解的东西,然后我暴力硬讲)
一些水平比较高的人可能可以注意到我讲得都有点民科感了(其实还不如民科///,比如那个『哥巴赫猜想证明』我就写不出来,这里无讽意味
👆 这里就体现出一个 trivial 和 nontrivial 的区别了,本频道会告诉大家他的证明为什么是错误的,while 一些关注此事的其他频道都只是发个链接而已,根本懒得去看什么证明原文,更不会拿 XeTeX 特地排版个 PDF 出来给大家看了
对于能看出我这次讲得很迫真的人来说,说句抱歉,请多包涵... (
也非常感谢一些同行者的理解,虽然我们水平会相差很大,但我这个不算是乌龟的家伙正在努力的赶上前面的兔子,我不想特别去比较,但我要赶上前面的大家。
当时那样幼稚的话,要是还发给了 @drakeet 肯定早被长者们拉黑了,可是有些人虽然因为永远在学习所以不能特别的去关心其他 naive 一点的爱好者,却每次都愿意给予帮助,实在是发自真心的热爱 CS 啊
因为我其实对 FP 还有 Haskell 的一些东西都不是特别了解,然后又硬想讲
然后就出这种笑话,当然我其实不怕出笑话的( 🤔
我的水平其实一直不是特别高,目前算是打了个理解力基础,书什么的我还要再看第三遍
我还要尝试打字更快,然后我会再开一个频道专门放我对一些书知识的理解,到̶时̶候文̶体̶两̶开̶花̶,̶多̶多̶支̶持̶...
谢谢大家对我的关注。Thank Q Thank Q!(指 XM
今后也会努力做到曾经想的『工̸程̸理̸论̸两̸开̸花̸、信̸息̸生̸活̸两̸开̸花̸』同时 DSP、Net、信息编码、计算机图形学、人工智能这类边角科也得学好。
一些水平比较高的人可能可以注意到我讲得都有点民科感了(其实还不如民科///,比如那个『哥巴赫猜想证明』我就写不出来,这里无讽意味
👆 这里就体现出一个 trivial 和 nontrivial 的区别了,本频道会告诉大家他的证明为什么是错误的,while 一些关注此事的其他频道都只是发个链接而已,根本懒得去看什么证明原文,更不会拿 XeTeX 特地排版个 PDF 出来给大家看了
对于能看出我这次讲得很迫真的人来说,说句抱歉,请多包涵... (
也非常感谢一些同行者的理解,虽然我们水平会相差很大,但我这个不算是乌龟的家伙正在努力的赶上前面的兔子,我不想特别去比较,但我要赶上前面的大家。
当时那样幼稚的话,要是还发给了 @drakeet 肯定早被长者们拉黑了,可是有些人虽然因为永远在学习所以不能特别的去关心其他 naive 一点的爱好者,却每次都愿意给予帮助,实在是发自真心的热爱 CS 啊
因为我其实对 FP 还有 Haskell 的一些东西都不是特别了解,然后又硬想讲
然后就出这种笑话,当然我其实不怕出笑话的( 🤔
我的水平其实一直不是特别高,目前算是打了个理解力基础,书什么的我还要再看第三遍
我还要尝试打字更快,然后我会再开一个频道专门放我对一些书知识的理解,到̶时̶候文̶体̶两̶开̶花̶,̶多̶多̶支̶持̶...
谢谢大家对我的关注。Thank Q Thank Q!(指 XM
今后也会努力做到曾经想的『工̸程̸理̸论̸两̸开̸花̸、信̸息̸生̸活̸两̸开̸花̸』同时 DSP、Net、信息编码、计算机图形学、人工智能这类边角科也得学好。
duangsuse::Echo pinned «#emmm 这周我发的一些东西... 因为都是『超常发挥』(其实都是我不了解的东西,然后我暴力硬讲) 一些水平比较高的人可能可以注意到我讲得都有点民科感了(其实还不如民科///,比如那个『哥巴赫猜想证明』我就写不出来,这里无讽意味 👆 这里就体现出一个 trivial 和 nontrivial 的区别了,本频道会告诉大家他的证明为什么是错误的,while 一些关注此事的其他频道都只是发个链接而已,根本懒得去看什么证明原文,更不会拿 XeTeX 特地排版个 PDF 出来给大家看了 对于能看出我这次讲…»
duangsuse::Echo
#OI #dev 顺便问一下(提个有趣的问题等有趣的人来解答),谁对开发类似静态(就是按一下键刷新一帧)贪吃蛇游戏有算法思路? duangsuse 还是今天才有的 LIFO 蛇表示法思路...
因为我之前对 BitMap 是无感的,现在就有感了(自从写那个简单的 Python FreeType 程序之后
其实对于大佬们来说,平时写点『短代码』,比如拿 Kotlin + JDK AWT
(实际上很多人哪怕写的是 Haskell,理解所基的也是非常 trivial 非常字面上而且浅薄的模式识别,他们根本没有一个清晰明了的思路,没有那么强的直觉,因为人类的本质... 是什么呢?)
?:{人类的本质是什么}
真的都不是事... 拿来讲讲而已... 包括 @kodamasakuno (Windows C# 开发者)也会拿 WMF(WindowsMediaFoundation)C# 去写代码剪辑视频
而不是用剪辑软件,虽然这种非常 trivial 的技能他们也不是没有
(实际上,这种技能都被我看作是『生来就有』『理所应当』的)(take for granted)
你会发现他们的学习能力真的很强,什么东西信息都是信手掂来的,技能也都是即学即用,从来不会在特定的某个领域,某个工程上停留太久
就是那种所谓的『天才』,而且很有研究能力,探讨问题起来也是口若悬河
但又着实有着长时间维护某些中型工程的能力,他们只是『学不饱』
这就可见他们的智慧了... 大佬 👍 #CS #statement
其实对于大佬们来说,平时写点『短代码』,比如拿 Kotlin + JDK AWT
JPanel 画函数图(而不是用 ZeGrapher 这种,或者拿 Python 库去写)(实际上很多人哪怕写的是 Haskell,理解所基的也是非常 trivial 非常字面上而且浅薄的模式识别,他们根本没有一个清晰明了的思路,没有那么强的直觉,因为人类的本质... 是什么呢?)
?:{人类的本质是什么}
真的都不是事... 拿来讲讲而已... 包括 @kodamasakuno (Windows C# 开发者)也会拿 WMF(WindowsMediaFoundation)C# 去写代码剪辑视频
而不是用剪辑软件,虽然这种非常 trivial 的技能他们也不是没有
(实际上,这种技能都被我看作是『生来就有』『理所应当』的)(take for granted)
你会发现他们的学习能力真的很强,什么东西信息都是信手掂来的,技能也都是即学即用,从来不会在特定的某个领域,某个工程上停留太久
就是那种所谓的『天才』,而且很有研究能力,探讨问题起来也是口若悬河
但又着实有着长时间维护某些中型工程的能力,他们只是『学不饱』
这就可见他们的智慧了... 大佬 👍 #CS #statement
Telegram
duangsuse::Echo
#Tool #CG #Python #Project 最终版... 权当玩具... 可是貌似花了我一些时间调试和了解,其实 PIL 封装得也是... 有好有不好
duangsuse::Echo
综上所述 #Learn #Haskell #FP #Algorithm 汉诺塔问题,问题的定义在这里 我对问题的抽象在这里 尝试使用递归算法求得可行解 我之前通过一̶长̶串̶失̶败̶的̶尝̶试̶总结出了规律 def naive-swap(dst, buf, src) = src(smaller) » buf; src(bigger) » dst; buf(smaller) » dst 这是一个较小规模的子问题 可以得知 + A=[] 时无需进行任何操作 + A=[1] 时进行 A » C + A=[1…
所以『天才』和『工程师』区别重点是在『独立思考』
这点淫王也提到过,自己脑子不用怎么能怪脑子不好使呢?
现在很多成年人的能力老够了,只不过是开始学习『如日出之阳』的时候没有尝试做太多的努力
去理解某些 nontrivial 的东西,而是一直发扬着『代码复用』的旗帜,写着不如小学奥数的代码,以至于有人入行五年可能都没有本质上的长进
最后成为技能树比较平凡比较窄的工程师,只能做了很多工程后才能做出一些还不错的库、框架,而且产量很低目光很短
有些人甚至最后成为一个单纯的翻译机一个码农,比起这样,我还是更愿意当数学爱好者吧...
虽然一切都要自己动手(如果不考虑那些计算机数学系统的话)但至少自己明白自己在干什么,不只是一个接口层面上的抽象
而是自己理解整个过程,自己手算 1+1=2
虽然最后这个 Hanoni 塔问题,我早知道可以递归解题但是还是没能等到独立解题的时候(熬夜分析了两个小时)
但最后我的确是开始走向问题解决办法了,而且我是独立思考的
独立思考很重要,最终的题解其实大家看了或许都有『恍然大悟』的感觉,但是独立推导归纳出来这些『简单』的东西之后,收获才是最大的。
这点淫王也提到过,自己脑子不用怎么能怪脑子不好使呢?
现在很多成年人的能力老够了,只不过是开始学习『如日出之阳』的时候没有尝试做太多的努力
去理解某些 nontrivial 的东西,而是一直发扬着『代码复用』的旗帜,写着不如小学奥数的代码,以至于有人入行五年可能都没有本质上的长进
最后成为技能树比较平凡比较窄的工程师,只能做了很多工程后才能做出一些还不错的库、框架,而且产量很低目光很短
有些人甚至最后成为一个单纯的翻译机一个码农,比起这样,我还是更愿意当数学爱好者吧...
虽然一切都要自己动手(如果不考虑那些计算机数学系统的话)但至少自己明白自己在干什么,不只是一个接口层面上的抽象
而是自己理解整个过程,自己手算 1+1=2
虽然最后这个 Hanoni 塔问题,我早知道可以递归解题但是还是没能等到独立解题的时候(熬夜分析了两个小时)
但最后我的确是开始走向问题解决办法了,而且我是独立思考的
独立思考很重要,最终的题解其实大家看了或许都有『恍然大悟』的感觉,但是独立推导归纳出来这些『简单』的东西之后,收获才是最大的。
Telegram
duangsuse::Echo
See Also:
+ 各种语言的算法实现
+ 某博客的教程
+ Haskell 图解,并且使用了 Haskell 可视化包
+ 一个延伸的汉诺塔问题
+ Wikipedia Hanoi
+ Wikipedia 递归
== Haskell 的副作用版解法
hanoni n (a, b, c)
| n == 1 = putStr (a ++ "->" ++ c) >> putStrLn ";"
| otherwise
= do
hanoni (n - 1) (a, c, b)…
+ 各种语言的算法实现
+ 某博客的教程
+ Haskell 图解,并且使用了 Haskell 可视化包
+ 一个延伸的汉诺塔问题
+ Wikipedia Hanoi
+ Wikipedia 递归
== Haskell 的副作用版解法
hanoni n (a, b, c)
| n == 1 = putStr (a ++ "->" ++ c) >> putStrLn ";"
| otherwise
= do
hanoni (n - 1) (a, c, b)…