PLT 板


LINE

看板 PLT  RSS
最近在涉猎另一种程式语言流派, 不是天流地流与神流,不是二刀流,也不是人称一流剑一流, 是一种叫做函数式语言 (functional programming language) 的. 先声明,因为以往工作与学习环境并不熟悉这东西的实作, 以下凡谈到底层,含编译/直译等,都是胡扯瞎掰的. 如果有幸,将来可能有机会实作. 函数式语言的特色就是函数定义,写完函数,程式就写完了. 跟传统程式语言 (结构化程式) 有什麽差别呢? 按数学来讲,函数是指将定义域映射到值域, 而传统程式语言的函数,除了映射之外, 还多了很多东西, (流程控制,例外处理,资源管理...等) 所以更称为函式. 函数式语言没有指定叙述,没有副作用 (side effect), 也没有流程控制. 可想而知,递回是函数式语言常用的东西,因为递回有隐性的流程控制功能. 这时候可能看棺...呃,看倌们会想到函数式语言程式有多慢, 但因为函数式语言没有副作用,意指一个子函数只做它该做的事,其他不多做. 譬如隔壁 p 版正在讨论的 int x=12; x=x+++++x; 疑义, 在函数式语言的世界是完全无效的! 哪个子运算式/子函数先计算,结果都一样. 因此,一份函数呼叫可以被自由代换为它的函数内容,不改其义. 递回函数很慢,展开成非递回函数就快多了. (甚至或许底层不需要有传统语言编译器的函式控制记忆区) 函数式语言之所以没副作用,那是因为所有的变数一使用就不改其值. 没有指定叙述可以修改变数内容. 接下来再讲讲逻辑式语言, (logical programming language) 逻辑语言的基本构件是逻辑式. 用过 Prolog 的人也许会觉得 a :- b, c. 是规则, (if b and c then a) 但这样很容易陷入规则式推论系统的框架中,误以为一旦使用 Prolog, 就非得实作规则式推论系统. 事实上,那是 !b || !c || a 这般逻辑式 (此式借用C的符号), 称为Horn clause. (Horn clause到底怎麽翻译啊? 角句吗?) 逻辑式语言的程式,就是许多逻辑式的集合, 称为演绎式资料库 (deductive database, DDB). 逻辑式语言的计算,在於掌握解集. (answer sets, 答案集) 回想范式图 (Van diagram), 如果你有一则逻辑式 a :- (意指 a 恒真;已知 a), 你就会将一张代表宇集 U 的白纸划为两半,一半在线圈内,属於 a/true 的范围, 另一半在线圈外,属於 ﹁a/false 的范围. 当你有另一则逻辑式 b :-, 就在纸上画另一个线圈. 加上一则逻辑式 c :- a, b, 是让 a 线圈与 b 线圈有个交叠部份. 计算一则问题 ?- c 是与解集周旋,通过逻辑式的交叉火网,在那张白纸上画地图. 有些问题经计算後,会得到多种解集,譬如: 在DDB a :- ﹁b, c. b :- ﹁a, c. 中, 询问 c 会得到 {a, ﹁b} 或 {﹁a, b} 二种解集. 解集的计算,称为解集规划 (answer set programming). 演绎式资料库已经有一串发展脉络,随着逻辑式可用符号的增加,解集规划也更复杂. 按着发展脉络及系统层次,简单地介绍於下: 1. DDB: 这个层次很低,很单纯,没有否定的述词 (predictive). 2. Monotonic DDB: 改良 DDB 的缺点,增加了 ﹁ 符号, 其语意是指某述词的存在不成立. * DDB 与 MDDB 的层次相同,之後则是一层高於一层. 3. Extended Logic Programming (eLP, XD): ﹁ 符号的语意不够完整. (试想想 "我不喜欢你" 与 "我没有喜欢你" 的差别.) 因此,新的 not 符号诞生了,任务是明确表达某述词的存在不存在都未定义. 述词的否定符号优先顺序是先判断 not 述词是 unknown, 再判断 ﹁ 述词是真的没有. 4. Disjunctive Logic Programming: 终於可以使用 or 符号了. 5. Epistemic Logic Programming: 再加上一些很高阶的符号, 例如 K 代表已知为真 (it's Known to be true), M 代表必须为真 (it Must be true) 至於实作层面,不管是直译或编译皆可,想必都要附加一份引擎. (流程控制不是该烦恼的事,函义/语意才是.) 相较之下,传统程式语言不需要附加引擎,不过,所写的程式本身就是引擎. 你要先把引擎的流程控制/副作用搞定. 辛苦的程式工人啊! --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.112.224.119
1F:推 semop:Horn clause 是以 Alfred Horn 为名的... 02/25 14:10
2F:→ ephesians:所以应该称为Horn的句子 02/25 14:44







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP