Skip to content

zongwu's blog

大语言模型 (Large Language Model)涌现能力随想

科学技术以及工业界主流思维范式依然是还原论。

所谓还原论简单讲就是,我们坚信所有的系统都是可以通过合适的拆分,一步步分解成简单的构件,逐个认知/实现所有的构件并组装起来,最终就理解/实现了原来的系统。

无论是量子物理还是国家税收系统,无论是复杂的航天工程还是小商贩日常使用的电子秤,无论是发明几百万人使用的编程语言还是小公司试图制定新的年度计划,我们都坚信事物总是由其子模块构成的,通过分而治之的办法我们总能构建出来某些事物。

数学家、哲学家、现代还原论的标志性人物笛卡尔在其《方法论》中提出了还原论方法的基本原则:

把我所考察的每一个难题,都尽可能地分成细小的部分,直到可以适于加以圆满解决的程度为止

回溯以牛顿力学的出现为代表的自然科学的开端,可以看到整个自然科学的发展都是建立在还原论基础之上。物理化学生物医药材料信息等等学科的还原式分化确立与繁荣的过程,都不断地印证并强化着人类对还原论这一哲思的信念。

Scotty web framework 源码初探

scotty 是一款非常容易上手的、构建在 WAI/Wrap 之上的 Haskell web frameowrk,官方文档的 start 例子:

{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty

import Data.Monoid (mconcat)

main = scotty 3000 $
    get "/:word" $ do
        beam <- param "word"
        html $ mconcat ["<h1>Scotty, ", beam, " me up!</h1>"]

编译运行即可体验简单的 web 应用。

WriterT 相关源码分析

看完ReaderT源码,接着来分析WriterT的源码。

示例

先看一个超级简单的例子:

import Control.Monad
import Control.Monad.Trans.Writer

data LogEntry = LogEntry { msg :: String } deriving (Eq, Show)

calc :: Writer [LogEntry] Integer
calc = do
    tell [LogEntry "Start"]
    let x = sum [1 .. 10000000]
    tell [LogEntry (show x)]
    tell [LogEntry "done"]
    return x
    
test = execWriter calc
test2 = runWriter calc

test执行结果:

[LogEntry {msg = "Start"},LogEntry {msg = "50000005000000"},LogEntry {msg = "done"}]

[翻译]ReaderT 设计模式

讲解工程实践中为什么需要 ReaderT 模式比较清晰的文章,就翻译了一下。原文见这里

在工程实践中,一些语言比如 Java 通过设计模式用来解决某些常见的场景问题。Haskell 语言没有这类设计模式,它通过语言层面的特性解决这些问题。 然而,我相信仍然有一些关于程序结构的高级指导的空间,我将其松散地称为 Haskell 设计模式。 这次描述的模式被称为 ReaderT 模式 。我将其用作 Yesod 框架 Handler 类型设计的基础。

至今我们仍未得知那些平行宇宙里的小白鼠们是否懂得信息论

问题

假设现在有1000瓶药水,其中一瓶是毒药,服用后一小时发作身亡。毒药可以无限稀释,并且混合药水花费的时间可以忽略,那么给定一小时你需要至少几只小白鼠来找到毒药?

一直以来,小白鼠们为生物医学科研和制药行业贡献太多。