• 请不要在回答技术问题时复制粘贴 AI 生成的内容
frogs
V2EX  ›  程序员

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

  •  
  •   frogs · Nov 14, 2013 · 9442 views
    This topic created in 4746 days ago, the information mentioned may be changed or developed.
    各位有谁对函数式编程语言比较熟悉的,求推荐。jvm语言不想考虑。
    45 replies  •  2015-10-19 06:49:45 +08:00
    ssword
    ssword
    Nov 14, 2013
    1
    看一遍 sicp,再练习下 haskell 就好了。

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

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

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

    推荐动态类型的,比如Racket,Common Lisp
    tioover
    tioover
    Nov 17, 2013
    41
    学习的话自然是Scheme。
    实用的话……Racket 也很好啊。
    lenage
    lenage
    Nov 17, 2013
    42
    @frogs 忽略括号按照缩进看
    Sherlockhlt
    Sherlockhlt
    Nov 18, 2013
    43
    @bombless

    同意,反过来,如果你一开始就完全想好了,写的时候就很爽,类型系统各种提供Buff
    aminic
    aminic
    Nov 19, 2013
    44
    sicp必看,就冲里面的太极图也要看的。。
    dinw
    dinw
    Oct 19, 2015
    45
    虽然是老帖子了。顶起来。方面后来人在线学习 OCaml: http://www.v2ex.com/t/229082
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1933 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 15:42 · PVG 23:42 · LAX 07:42 · JFK 10:42
    ♥ Do have faith in what you're doing.