随笔分类 - 5. Haskell函数式编程
Haskell/LISP...
摘要:《Two Dozen Short Lessons in Haskell》(Copyright © 1995, 1996, 1997 by Rex Page,有人翻译为Haskell二十四学时教程,该书如果不用于赢利,可以任意发布,但需要保留他们的copyright)这本书是学习 Haskell的一套练习册,共有2本,一本是问题,一本是答案,分为24个章节。第五章 Function Composition and Currying函数组合与柯里函数
阅读全文
摘要:《Two Dozen Short Lessons in Haskell》(Copyright © 1995, 1996, 1997 by Rex Page,有人翻译为Haskell二十四学时教程,该书如果不用于赢利,可以任意发布,但需要保留他们的copyright)这本书是学习 Haskell的一套练习册,共有2本,一本是问题,一本是答案,分为24个章节。第四章 Computations on Sequences — List Comprehensions
阅读全文
摘要:《Two Dozen Short Lessons in Haskell》(Copyright © 1995, 1996, 1997 by Rex Page,有人翻译为Haskell二十四学时教程,该书如果不用于赢利,可以任意发布,但需要保留他们的copyright)这本书是学习 Haskell的一套练习册,共有2本,一本是问题,一本是答案,分为24个章节。
第三章 How to Run Haskell Programs
阅读全文
摘要:《Two Dozen Short Lessons in Haskell》(Copyright © 1995, 1996, 1997 by Rex Page,有人翻译为Haskell二十四学时教程,该书如果不用于赢利,可以任意发布,但需要保留他们的copyright)这本书是学习Haskell的一套练习册,共有2本,一本是问题,一本是答案,分为24个章节。第二章 Definitions
阅读全文
摘要:近日看到一篇博客,写一个程序:生成26个非负随机数,要求其和是301。最近对Haskell很感兴趣,就试着写了一下,不动手则已,真写起来还是遇到点问题。在函数式编程里每个确定的输入一定会有确定的输出,而随机数就意味着相同的程序每次运行就输出不同的结果。
阅读全文
摘要:《Two Dozen Short Lessons in Haskell》(Copyright © 1995, 1996, 1997 by Rex Page,有人翻译为Haskell二十四学时教程,该书如果不用于赢利,可以任意发布,但需要保留他们的copyright)这本书是学习Haskell的一套练习册,共有2本,一本是问题,一本是答案,分为24个章节。
第一章 Hello World, Etc.
阅读全文
摘要:今天孩子问100以内的勾股数,正好用上刚学的Haskell语言,一行语句搞定!
[(x,y,z) | x-[1..100], y-[x..100], z-[y..100], x*x + y*y == z*z]
阅读全文
摘要:听说LISP历史很是悠久,看了《梦断代码》之后,想着看看LISP到底如何强大的,节日期间抽空装上LISP环境小试一下。 看一些LISP介绍时,听说了这样几条关于语言的格言: Perl的格言:做事情永远都有不止一种方法 Python的格言:做事情只有一种方法 Lisp的格言:可编程的编程语言 先装了GNU Common Lisp,简称GCL,在Windows7中安装时有个del的脚本运行...
阅读全文
摘要:用Haskell解八皇后问题,Haskell才是最精练的程序:main = print $ queens 8boardSize = 8queens 0 = [[]]queens n = [ x : y | y <- queens (n-1), x <- [1..boardSize], safe x y 1] where safe x [] n = True safe x (c:y) n = and [ x /= c , x /= c + n , x /= c - n , safe x y (n+1)]运行结果:[[4,2,7,3,6,8,5,1],[...
阅读全文
摘要:haskell支持两种方法表示列表或集合,一种是直接在方括号中列出每个元素,另一种是给出生成这些元素的规则,称为List Comprehensions。
阅读全文
摘要:为了方便,后面的程序不再写出完整的可执行程序,而是用ghci交互执行。(1) 写一个hello4.hs文件,只包含下面一行removeBlanks str = [c | c <- str, c /= ' '](2) 在控制台中执行ghci命令,注意先转到hello4.hs文件所在的目录,会出现Prelude>提示符(3) 加载hello4.hs中的函数定义,因为不能在ghci直接定义函数,只能从文件中加载(多谢朋友提醒,在ghci中可以直接定义函数,前面加上关键字let即可),执行命令:load hello4.hs(4) 执行removeBlanks "H
阅读全文
摘要:将字符串倒序输出执行:hello.exe haskell结果:lleksahimport System( getArgs )main = do args <- getArgs putStrLn (if length args == 0 then "no argument!" else reverse (args !! 0))要点:(1) haskell的基础库Prelude中提供了reverse的函数, 源代码用到了递归定义:reverse l = rev l [] where rev [] a = a rev (x:xs) a = rev xs (x:a)(2) 字
阅读全文
摘要:从haskell的官方网站上竟然没有找到haskell的发音,加入了这个邮件列表haskell-cafe@haskell.org,很快就得到了答案。[hjp2=400,30,true]http://www.n-heptane.com/nhlab/spj-haskell.wav[/hjp2]
阅读全文
摘要:如果写控制台程序,经常需要跟上许多命令行参数,我的目的:如果不带任何参数,则输出“Hello World”,如果带参数,则将参数跟在Hello的后面。执行:hello.exe输出:Hello World执行:hello.exe Haskell输出:Hello Haskell代码如下:import System( getArgs )main = do args <- getArgs putStrLn (if (length args) ==0 then "Hello World" else ("Hello " ++ args !! 0))要点:(1)
阅读全文
摘要:(1) 下载并安装ghc编译器,默认安装在c:\ghc目录下(2) 编辑源程序hello.hs,只用一行语句main = putStrLn "Hello World"(3) 用"cmd.exe"打开一个控制台窗口(4) 在hello.hs所在的目录中运行ghc编译命令ghc -o hello.exe hello.hs(5) 运行hello.exe, OK要点:(1) haskell即可以编译执行,也可以解释执行,这里用的是ghc,对应的解释器叫ghci,以前的许多教科书一直用hugs。(2) main是一个函数,haskell程序就是许多函数定义的集合。
阅读全文
摘要:从网上搜了一番关于haskell的文章,大部分都在国外网站上(不少BLOG站点在国内无法访问),国内研究这语言的极少。在www.haskell.org的wiki网站上有一点点关于haskell的快速入门的中文翻译,其它中文材料就更鲜有了,在china-pub上没有查到一本与此相关的书,英文影印版也没有。 英文教材中比较有名的可能是《Programming in haskell》了,作者Graham Hutton,从emule上很容易找到2003年8月(118页)和2005年8月(200页)的版本,据说有2007年的最终稿,但没有见到。 微软研究院Simon Peyton Jones在2...
阅读全文
摘要:玩了近20年的编程,竟然不知道函数式编程(Function Programming),惭愧。无意中看到Haskell编程语言,为其精练性所叹服!一段程序就与像是一条条公式,以前受到太多的命令式编程(Imperative Programming)的教育,学习这东西必须转换一下编程思路。 下面是一段快速排序算法的代码:qsort []= []qsort (x:xs) = qsort smaller ++ [x] ++ qsort larger where smaller= [a |a <- xs, a < x ] larger = [ b | b <- xs, b >= x
阅读全文