Re: [问题] 大家觉得函数式语言有前途吗?

楼主: xcycl (XOO)   2013-10-30 09:18:36
: haskell 是目前 ML 系语言中,社群整合最好的,cabal 很方便
: 就能下载别人写好的 lib 来用,但相较于前两者,要跨过的门
: 槛就高很多,一般的 FPL 都会提供一个用来宣告 side-effect
: 变量的方法,即使是很杂的 Common Lisp 也有区分这两者,
: haskell 用来提供 side-effect 的做法叫作 monad,这还只是
: 第一个门槛,光这个就可以让人花上半年一年去搞懂它了,更
: 不必提载下来的两个 lib 都有 monad 的时候该怎么办了。
: 但是当我们想了解 Types 是什么,PL 又是什么,又例如该怎
: 么设计一个 PL 的时候,最容易帮助我们理解并且解决这些问题
: 的通常会是 FPL,你可以 google 书单,就不多讲这个了。
这边有一点要澄清的,Haskell 中谈 side-effect 并不等于 impure function,
只有用到 IO monad,Haskell 的程式才有可能是 impure 的。
至于其他的 monad 仍然保证函数的 purity,只是用 monad 的结构方便描述
所谓的 effect,但我们可以抽换所有 monad 换成一般基本的写法。
假设我们要写一个抽象的 imperative 语言的直译器,
将程式用 Haskell 的型别定义,称为 Program 的话,直译器函数的型别可写成
interpreter :: (Program, Memory) -> Memory
或是
interpreter :: Program -> Memory -> Memory
则对任意允许 side-effect 但排除 IO 的程式,
是一个将 "内存状态" 对应到 "内存状态" 的数学函数。
例如赋值可以写成
interpreteer (x := e) m = write x (eval e m) m
其中 eval e m 计算用现有的状态 m 来计算 expression e 的值,
write 则回传更新后的状态。这边“状态”可以用 list 或是函数来代表。
而同样的函数可以用所谓的 state monad 来改写,在表达上会更简洁而已。
有兴趣的话,可以提供实际的范例。不过理解 monad 用到一年半载可能有些夸大了,
实际使用上学会用 IO monad 就可以写些比较实务的程式。

Links booklink

Contact Us: admin [ a t ] ucptt.com