作者reader (读者)
看板PLT
标题Re: [闲聊] 逻辑式语言与函数式语言
时间Sun Feb 25 13:39:56 2007
※ 引述《ephesians (ephesians)》之铭言:
: 最近在涉猎另一种程式语言流派,
: 不是天流地流与神流,不是二刀流,也不是人称一流剑一流,
: 是一种叫做函数式语言 (functional programming language) 的.
: 先声明,因为以往工作与学习环境并不熟悉这东西的实作,
: 以下凡谈到底层,含编译/直译等,都是胡扯瞎掰的.
: 如果有幸,将来可能有机会实作.
: 函数式语言的特色就是函数定义,写完函数,程式就写完了.
: 跟传统程式语言 (结构化程式) 有什麽差别呢?
: 按数学来讲,函数是指将定义域映射到值域,
: 而传统程式语言的函数,除了映射之外,
: 还多了很多东西, (流程控制,例外处理,资源管理...等)
: 所以更称为函式.
: 函数式语言没有指定叙述,没有副作用 (side effect), 也没有流程控制.
这应该是指 purely functional programming language 才是这样。
像 Haskell 和 Clean 都是,这十年来 Haskell 当红,成为函数式语言的
代表性语言,所以才让人觉得函数式语言都是这样。
但实际上 "不纯" (impure) 的函数式语言反而比较多,像早年比较热门的
LISP, Scheme 到 ML, 或总是被当成明日之星,却始终没起色的 Erlang,
都不是纯函数式语言。
而在 OO 热门之後,像是 CLOS, Dylan, Objective Caml 这类结合 OO 的
函数式语言,也都流行过一阵子。
抛开学生最爱的 Haskell 不谈 (若无 lazy evaluation 的出现,纯函数式
语言几乎被认为是一种无用的学院派程式语言) ,商业上最成功的 Common
Lisp, 就是什麽都有的,以函数式语言为主的混合式语言。
: 至於实作层面,不管是直译或编译皆可,想必都要附加一份引擎.
: (流程控制不是该烦恼的事,函义/语意才是.)
所以 Logic Programming 一般都不会被通用程式语言的设计当中被考虑,
只是早年人工智慧当红时,被当成四大程式设计典范,而总是在教科书中
占有一席之地,实际上已经是历史陈迹等级的东西了。
或者讲得狠一点,作为电脑科学史上最耗钱最无用计划之一的第五代电脑
计划之核心语言的 Prolog, 是程式语言发展史的一大误区,不能说没用,
但只怕在学习时得在心里多存着几分警惕,那许诺的乌托邦是不存在的。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.222.173.26
1F:推 ephesians:受教 02/25 14:47
2F:推 YuYuHo:以前用prolog时,吓到,感觉像是两光版的sql. 02/25 20:21
3F:推 caml:去年我搞了prolog一年﹐比较愚钝﹐感觉这个语言不flexible 02/26 17:27