想学一门functional programming语言,求推荐 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
frogs
V2EX    程序员

想学一门functional programming语言,求推荐

  •  
  •   frogs 2013-11-14 20:48:53 +08:00 8212 次点击
    这是一个创建于 4350 天前的主题,其中的信息可能已经有所发展或是发生改变。
    各位有谁对函数式编程语言比较熟悉的,求推荐。jvm语言不想考虑。
    45 条回复    2015-10-19 06:49:45 +08:00
    ssword
        1
    ssword  
       2013-11-14 20:56:09 +08:00
    看一遍 sicp,再练习下 haskell 就好了。

    期间遇到不懂的地方就放一放,不要把fp的一些概念想得过于玄乎。
    frogs
        2
    frogs  
    OP
       2013-11-14 21:01:38 +08:00
    @ssword
    sicp不是lisp的吗 那就是要用haskell来实现lisp的题目。作为一个函数fp newbie,有难度啊。
    不过这样子我能学到哪些东西?
    gihnius
        3
    gihnius  
       2013-11-14 21:09:59 +08:00
    common lisp
    frogs
        4
    frogs  
    OP
       2013-11-14 21:19:55 +08:00
    @gihnius
    lisp系列的怎么总是觉得括号看起来这么费神 :(
    yangff
        5
    yangff  
       2013-11-14 21:40:05 +08:00
    如果这样……只是想玩玩的话不妨Javascript算了……
    zava
        6
    zava  
       2013-11-14 21:42:50 +08:00
    嘿嘿,scala
    frogs
        7
    frogs  
    OP
       2013-11-14 21:46:29 +08:00
    @zava
    吓我一跳 我以为我自己回复了自己。
    frogs
        8
    frogs  
    OP
       2013-11-14 21:49:34 +08:00
    @yangff
    其实之前google了一下,倾向与在ocaml和haskell之间选一个。
    sectic
        9
    sectic  
       2013-11-14 21:50:26 +08:00   1
    haskell 这个语言不一定能用上,设计上也不一定“好”,但是对于接触functional programming最好不过,可以让你很直接的接触各个概念。
    wenbinwu
        10
    wenbinwu  
       2013-11-14 21:56:10 +08:00
    ML名字也得
    zava
        11
    zava  
       2013-11-14 21:58:20 +08:00
    @frogs 同好。
    scala既实用,又能满足楼主的要求。编译成class,跑在JVM上,和java互通很方便。算是和主流语言最接近的了。
    frogs
        12
    frogs  
    OP
       2013-11-14 21:58:33 +08:00
    @sectic
    能说说理由吗,好处在哪里
    sectic
        13
    sectic  
       2013-11-14 21:58:34 +08:00
    sicp的话有些概念很有意思,比如引用透明性,这个往上深究可以到lambda 算子怎么和图灵机等价的。
    zava
        14
    zava  
       2013-11-14 21:59:51 +08:00
    @frogs
    不明白楼主为啥这么强调不要 JVM ?他也只是一个虚拟机。和其他的虚拟机本质没啥区别啊。
    tzheng
        15
    tzheng  
       2013-11-14 22:01:56 +08:00
    为啥楼上没有人提clojure啊。。我也来搅趟浑水。。我真的以为最应该clojure
    frogs
        16
    frogs  
    OP
       2013-11-14 22:05:08 +08:00
    @zava
    因为我是做c出身,对java那种跑起来机器热乎乎的语言有点洁癖。
    MichaelYin
        17
    MichaelYin  
       2013-11-14 22:11:53 +08:00
    sicp里面用到的Scheme是lisp的一个分支,sicp这本书写的也非常不错特别是里面的练习题是很值得一做的。。。如果要学FP这本书是极力推荐的了。。。
    Golevka
        18
    Golevka  
       2013-11-14 22:13:59 +08:00   1
    上coursera和Dan Grossman一起撸SML和Racket
    yangff
        19
    yangff  
       2013-11-14 22:14:20 +08:00
    @frogs 那还是haskell比较好上手吧(我觉得)。
    frogs
        20
    frogs  
    OP
       2013-11-14 22:22:42 +08:00
    @yangff
    学的话 据说是ocaml好学点。
    felix021
        21
    felix021  
       2013-11-14 22:23:28 +08:00
    同1L @ssword 同学,我也是推荐先跟着SICP学(就用scheme),然后再看看haskell作为对比。对于只是想要了解fp的需求最合适了。

    如果想要贴近开发的话,就考虑ErLang/Clojure/Scala。
    wenbinwu
        22
    wenbinwu  
       2013-11-14 22:46:17 +08:00
    sectic
        23
    sectic  
       2013-11-14 22:48:06 +08:00   4
    我来讲一下吧,计算机语言基本来源大概就俩,一个是无限纸带的图灵机,另外一个是邱奇的算子。这俩很有意思,图灵和邱奇差不多同时通过这俩模型来证明了希尔伯特猜想不成立。图灵机可以说是一大批语言的前身,比如ALGO,比如C。元图灵机U可以说是现代编程这个东西的先驱。functional programming 可以说是另外一个路子,就是邱奇的算子。我推荐haskell的原因之一,就是haskell中的概念跟lambda calculus 中的概念基本是一一对应的,知道这些概念后,看其他的函数式语言也差不多。包括haskell中函数的定义。说实话,lisp可能是最正统的,但是我觉得lisp方言有点严重,各种lisp应该有一定鉴别力后再去看。
    frogs
        24
    frogs  
    OP
       2013-11-14 22:50:35 +08:00
    @wenbinwu
    额 是不知道怎么回。 我当然知道,ML是跟ocaml一脉的。
    gihnius
        25
    gihnius  
       2013-11-14 22:52:00 +08:00   1
    @frogs 很多人都先入为主的在乎了最不该在乎的 '括号', 唉!
    frogs
        26
    frogs  
    OP
       2013-11-14 22:57:56 +08:00
    @sectic
    我只知道函数是跟过程式的是截然不同的两种想法,一种是面向机器式的,首先是最大限度利用机器,其次才是解决问题。另外一种是面向解决问题,只不过需要依赖机器来帮助实现。没想到有这么个历史,长知识了。
    wenbinwu
        27
    wenbinwu  
       2013-11-14 23:21:25 +08:00
    你想用是概念
    前者就往erlang 和haskell靠吧
    後者的SML ML的就行了
    aristotle9
        28
    aristotle9  
       2013-11-15 00:05:56 +08:00
    Haskell没有代数基础真玩不起来
    stevenyou
        29
    stevenyou  
       2013-11-15 07:05:03 +08:00
    个人觉得还是scala, coursera 上面有一个functional programming 的课,是教scala的
    robertlyc
        30
    robertlyc  
       2013-11-15 08:38:29 +08:00
    clojure
    fly2never
        31
    fly2never  
       2013-11-15 09:09:25 +08:00
    如果考虑jvm的话, clojure真是不错的推荐
    cYcoco
        32
    cYcoco  
       2013-11-15 09:31:20 +08:00
    LZ其实JVM啊 TAT clojure蛮赞的
    cYcoco
        33
    cYcoco  
       2013-11-15 09:31:36 +08:00
    歧视。
    heganj
        34
    heganj  
       2013-11-15 11:07:14 +08:00
    函数式编程跟 S表达式 是绝配,如果是C出身就考虑 Common Lisp / Scheme 咯,同样强烈推荐 SICP。
    我学的是Clojure,有4clojure这样的网站可以练习,不知道 Common Lisp / Scheme 有没有类似的学习网站
    isprin
        35
    isprin  
       2013-11-15 12:01:08 +08:00
    看SICP学Scheme
    CrazyApi
        36
    CrazyApi  
       2013-11-15 12:56:32 +08:00
    lz 只是想学的话 先找个简单的 ML 或 Scheme,了解下核心和基本的概念。理解后再学一门相对复杂但实用性更高的语言入 Haskell 之类的。
    这篇可以读一下 https://www.byvoid.com/blog/why-functional-programming/
    CrazyApi
        37
    CrazyApi  
       2013-11-15 13:13:22 +08:00
    @frogs 写 Lisp 真的不用担心括号的问题,让编辑器自动补全‘()’,还能自动匹配'(]'成‘[]’。
    se77en
        38
    se77en  
       2013-11-15 13:55:08 +08:00
    ocaml吧,haskell不够real world啊,ocaml就不一样了,Jane Street 90%的工作使用它啊
    luikore
        39
    luikore  
       2013-11-15 15:01:55 +08:00
    Haskell 或者 ML 系 (F# 比 Ocaml 更简洁)

    如果学 jvm 二奶语言, 最后你会发现想干点正经事你还得找各种 api 设计得让人吐血的 java 库.
    bombless
        40
    bombless  
       2013-11-15 22:11:36 +08:00
    haskell如果你不是一开始就完全想好了,改的时候痛苦死…被类型系统拖累死。

    推荐动态类型的,比如Racket,Common Lisp
    tioover
        41
    tioover  
       2013-11-17 13:25:21 +08:00
    学习的话自然是Scheme。
    实用的话……Racket 也很好啊。
    lenage
        42
    lenage  
       2013-11-17 13:58:09 +08:00
    @frogs 忽略括号按照缩进看
    Sherlockhlt
        43
    Sherlockhlt  
       2013-11-18 08:55:22 +08:00
    @bombless

    同意,反过来,如果你一开始就完全想好了,写的时候就很爽,类型系统各种提供Buff
    aminic
        44
    aminic  
       2013-11-19 08:38:21 +08:00
    sicp必看,就冲里面的太极图也要看的。。
    dinw
        45
    dinw  
       2015-10-19 06:49:45 +08:00
    虽然是老帖子了。顶起来。方面后来人在线学习 OCaml: http://www.v2ex.com/t/229082
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2881 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:20 PVG 08:20 LAX 17:20 JFK 20:20
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86