V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
frogs
V2EX  ›  程序员

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

  •  
  •   frogs · 2013-11-14 20:48:53 +08:00 · 7655 次点击
    这是一个创建于 4006 天前的主题,其中的信息可能已经有所发展或是发生改变。
    各位有谁对函数式编程语言比较熟悉的,求推荐。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   ·   实用小工具   ·   1705 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:36 · PVG 00:36 · LAX 09:36 · JFK 12:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.