Haskell-chp01】的更多相关文章

什么是函数式编程 用常规编程语言中的函数指针.委托和Lambda表达式等概念来帮助理解(其实函数式编程就是Lambda演算延伸而来的编程范式). 函数式编程中函数可以被非常容易的定义和传递. Haskell 快速入门 概述 Haskell是一个按照纯函数式编程思想创造的语言,支持静态类型.类型推断.惰性处理(推迟计算).支持并发编程. 安装 从官方网站的下载页面 https://www.haskell.org/downloads 根据自己的操作系统选择. 第一次接触Haskell…
一.下载地址:https://www.haskell.org/platform/windows.html Haskell Platform 整合了 Glasgow Haskell Compiler,WinGHCi等. 二. 自行下载 HashTab,校验SHA-256,检验文件完整性. HashTab安装完成后,右键-属性,查看相关信息. 三.遇到的问题 运行winghci.exe,产生如下错误. 解决办法:关闭360等类似软件,卸载Haskell Platform,重新安装. 猜测原因:在安装…
1.Haskell 中文社区:www.haskellcn.org 2.Haskell   官网:     www.haskell.org 3.Haskell   函数查询:www.haskell.org/hoogle 4.Haskell   趣学指南:http://learnyoua.haskell.sg/content/zh-cn/ch01/introduction.html…
说说我自己的背景吧,我是个半吊子的程序员,做任何事情喜欢比较了解然后再尝试,我接触过很多语言,大多数都把它当成工具来使用 我现在的工作大部分主要在于数据挖掘与机器学习方面,也学习web开发,我第一个拿来工作的语言是python,我是从那里得知函数式编程的概念的 说起lisp据说python就是模仿的lisp,而得知这个语言是从黑客与画家这本书中得知的,据说是一个特别值得尝试的语言,由于作者说如果年龄超过25岁,最好不要尝试学习它,我明年就本命年了,看来应该试着尝试一下了 在之前面临招工作的时候曾…
①循环?NO!请递归思考问题! 手艹一个求列表中最大值代码,C语言中习惯性for扫一下比较出最大值.但是可以用递归! maximum'::(Ord a)=>[a]->a maximum' []=error "empty!" maximum' [x]=x maximum' (x:xs) = max x (maximum' xs) 同样的对列表的递归技巧可以手艹出take.reverse.repeat.zip.elem rev::[a]->[a] rev []=[] re…
cps全称叫continuation passing style,简要来讲就是告诉函数下一步做什么的递归方式,由于普通递归有栈溢出的问题,而cps都是尾递归(tail recursion),尾递归则是没有栈溢出问题的,所以haskell推荐都用cps的方式去编写代码. 当然,相对于普通递归方式,cps也有着非常不便于理解的问题. def fact(n): if (n==0): return 1 else: return n* fact(n-1) print fact(400) 这是一段递归求阶乘…
monad本意是单子.在haskell中,第一个接触的基本都是IO action,通过把IO动作包装起来我们能很方便的与现实世界进行数据交换.但其实monad的用途不止如此,monad还能讲一系列操作进行序列化,而这一点在通常编程中是非常需要的.而在haskell中,类似的事情则是通过递归来完成了平时需要序列化的工作.但其实haskell中也有能进行顺序操作的方法,那就是monad.一个类似于monad的定义基本是这个样子的. class Computation c where success…
haskell中有两种定义局部变量的方法let和where,方法分别如下 roots a b c = ((-b + det) / (a2), (-b - det) / (a2)) *a*c) a2 = *a roots a b c = let det = sqrt (b*b - *a*c) a2 = *a in ((-b + det) / a2, (-b - det) / a2) 这两种方法都可以使全局变量定义失效 det = "Hello World" roots a b c =((…
haskell中的io模块主要是用于读写文件屏幕的,通过import IO来导入 其中有如下常用定义 data IOMode = ReadMode | WriteMode | AppendMode | ReadWriteMode openFile :: FilePath -> IOMode -> IO Handle hClose :: Handle -> IO () hIsEOF :: Handle -> IO Bool hGetChar :: Handle -> IO Ch…
在haskell中,有一个do的语句专门用来做一些不那么“干净”的事情,比如读写都需要用do来开头 一开始以为do的作用是做monad,后来发现是错误的,其实do做的事情是包裹一个顺序操作 比如在如下代码中 main=do > then do putStrLn "Step 1" putStrLn "Step 2" else putStrLn "Step 3" 第三行中的do如果缺少的话,编译器会报这个错误 The function `put…