Home
 
语言中模式匹配和对象的想法
 
Combinator Calculus 当中有个说法, 多参数函数可看成单参数函数的组合
通过接收一个参数后返回一个函数用来接收下一个参数, 从而接收多个
Haskell 的 Curry 也就是从这一角度可以理解的
 
然后关于面向对象, 我记得看到说 SICP 里用 20 行代码实现了 OO
书我没看, 但我在 StackOverflow 上看到一个 Scheme 的版本
stackoverflow.com/questions/2954642/methods-and-properties-in-scheme-is-oop-possible-in-scheme
简单说就是接收一个参数, 模仿 JS 中的属性, 然后给出返回值
从这里看, 函数参数和 OO 的 messaging 的概念是相似的
因此我猜想是否能设计一种语言, 其中 OO 和函数其实一体的
 
朴素的想法就是所有的数据认为是能接收消息的函数
接收消息之后返回或者确定的数据, 或者返回一个函数
数据可以同样是函数, 那就可以继续接受消息了, 和一切皆对象的理念相似
然而这有一个问题, 函数一经定义很难再修改函数内部的内容
而 JSON 内部明显存在可更改的数据的, 于是思路断了
 
注意到常见 OO 语言的类的概念, 定义之后仍能继承和更改, 也有相似点
也许类就是在数据和操作绑定同函数中间的一种折中方式
此外, JS 的函数存在 f.toString() 可以用来透视函数具体的内容
也即有了改变函数的可能性, 只要敢解析 AST 重新构造函数出来
但这两种办法太过复杂, 思路也不明确, 况且我不懂如何操作
 
接着到讨论模式匹配时我反应过来模式匹配与此类似
Haskell 的模式匹配可以定义特殊值, 可以限定特殊值的返回值
sayMe :: (Integral a) => a -> String
sayMe 4 = "Four"
sayMe x = "Others"
那么借此的确应该能设想一种函数, 可以绑定数据, 也可以返回函数
也可以在函数定义之后继续修改想要的返回值
f 2 = 'two'
f <number a> -> a + 1
f <any a> -> String a
f <string a> -> <nunmber b> -> a + (String b)
f <any a> -> <null>
Haskell 很大程度上已经是这样了, 当然其目标不在此
但如果我们能设计出好的类型系统出来, 就能逐个检测类型确定返回值
这就像是对像检测具体的数据, 然后做出相应的操作
 
这样了, 函数还应该有类似闭包或者类的独立的数据在
让数据绑定在函数上, 操作和更改之后保留历史的痕迹, 能继续访问
或者说其以一致的语法和思路模拟出类所具有, 私有数据的功能
不过这些我的确没有想好, 未必那是一种更有用更便利的语言
 
Haskell 和 Scheme 中没有对应 JS 数据和操作绑定的内容
而 JS 给人的看法 HashMap 与方法几乎是同一概念, 具体我还真不清楚了
我所想的是所有特性以明确的一条思路去统一, 比如函数和对象
连弄清楚自己对错的能里都还没.. 慢慢想想
 
comments powered by Disqus