Scheme&FP上路

原创 2006年06月03日 01:07:00
看SICP,发现自己越来越笨了,一段简单的程序都要想半天。
不过Scheme确实是抽象程度比价高的语言,习惯了C++/Java等逻辑程序设计语言,一下子用函数式程序设计语言的角度看问题还真有点反 应迟钝。逻辑程序设计语言里数据结构定义丰富自由,可以定义很直观易于理解的数据结构,算法是跟数据结构紧密相关的。而在Scheme里面,数据结构就是 list一种,复杂的结构如树等都是基于list的抽象。而且Scheme里没有诸如for,while之类的循环结构,一切皆过程。逻辑程序设计语言里 的for,while结构在Scheme中由过程的嵌套调用实现,这种嵌套调用是一种线性迭代过程,或者说是尾递归。Scheme中的递归过程分为递归计 算过程和迭代计算过程(From: SICP),一开始看的时候有些困惑,后来对照写程序就有点悟了。 不过还是有很多概念理解得不透彻,还需要继续洗脑。
抽空做了SICP的几个简单的练习,fringe将树状结构的页节点转换为一个list,这里采用的是线性迭代过程 :(fringe (list (list 1 2) 3 (list 4 5)))  ==> (1 2 3 4 5)   
(define (fringe lists)
  (define (fringe-iter lists answer)
    (cond ((null? lists) answer)
          ((not (pair? lists)) (append answer (list lists)) )
          (else (append (fringe-iter (car lists) answer)  (fringe-iter (cdr lists) answer)) ) ))
  (fringe-iter lists (list)))
reverse将树状结构进行倒置,和fringe一样,也用的是线性迭代过程。
(reverse (list (list 1 2) (lit 3 4)))    ==> ((3 4) (1 2))
(define (reverse tree)
  (define (reverse-tree tree answer)
    (cond ( (null? tree) answer)
          ( (not (pair? tree)) (cons tree answer))
          ( else (reverse-tree (cdr tree) (cons (car tree) answer )))))
  (reverse-tree tree (list ))
  )

deep-reverse将树状结构进行深度倒置,即子树的子树也进行倒置。这是一个线性递归过程.
(deep-reverse (list (list 1 2) (list 3 4)))  ==> ((4 3) (2 1))
(define (deep-reverse tree)
  (cond ( (null? tree) (list))
        (  else (append (deep-reverse (cdr tree))
                        (list (if (list? (car tree)) (deep-reverse (car tree))
                            (car tree)))))))

《男人上路》观后感

如果完全从电影蒙太奇的理论来说,这部电影根本称不上是一部电影。如果从国内外大片的大明星、大制作的理论来讲,这部电影烂到不能再烂,然而就是它,让我感受到了前所未有的震撼,这个主题就是——怎样去做一个男人...
  • xuepiaofei
  • xuepiaofei
  • 2006年03月14日 22:36
  • 2437

第一次上路开车记录

                                                                   第一次开车上路       拿到驾驶证已经有半年多了,想当初考驾驶...
  • penglijiang
  • penglijiang
  • 2011年06月19日 23:55
  • 4916

有一个信客

我家邻村,有一个信客,年纪不小了,已经长途跋涉了二三十年。    他读过私塾,年长后外出闯码头,碰了几次壁,穷愁潦倒,无以为生,回来做了信客。他做信客还有一段来由。    本来村里还有一个...
  • shuaz1111
  • shuaz1111
  • 2012年11月15日 12:10
  • 98

收拾心情,重新上路!

博客开通了N久了,一直没有写过文章,现在是越来越懒了呵呵…… 2010年的春天在绵绵春雨中渐行渐远,心情却一直还沉迷于过往迷蒙中,在新的公司一直浑浑噩噩,怨天尤人,都快成祥林嫂了。 再回头,江水已逝,...
  • lmhit
  • lmhit
  • 2010年04月21日 19:37
  • 643

OpenRS插件开发新手上路

利用OpenRS所提供源码走通一个简单入门级插件开发实例。 平台:VC6.0 前期准备:为方便日后文件管理,在\OpenRS\目录下建立自己的工作区目录,结构类似于OpenRS的组织结构。即,在\O...
  • zshuaihua
  • zshuaihua
  • 2015年03月29日 00:17
  • 1103

推荐歌曲 一百首最经典的歌曲下载

▁▂▃▅▆██◤最经典的背景音乐100首◥██▆▅▃▂▁ 有一种旋好象一见钟情的意中人,让你知道什么叫"曾经沧海难为水,除却巫山不是云";有一种旋律好似相思成灾的恋人,让你体会什么叫"衣带渐宽终不悔...
  • acetaohai123123
  • acetaohai123123
  • 2017年10月17日 21:55
  • 598

udev轻松上路(转)

原贴:http://blog.chinaunix.net/u/17928/showart_343417.html udev轻松上路(转) ...
  • chinalinuxzend
  • chinalinuxzend
  • 2007年10月21日 21:39
  • 1981

Hadoop上路_06-在Ubuntu中使用eclipse操作HDFS

目录[-] 1.解压eclipse: 2.安装hadoop开发插件:  3.执行快捷方式:  4.配置Hadoop视图:         1)window -> preference...
  • sata1
  • sata1
  • 2015年04月13日 09:49
  • 341

新手上路开车技巧 八步教你如何倒车入位

现在社会在马路边的车位越来越紧张,很多车在路边很难找到一个合适的停车位,新手上路就更难上加难了,就算找到想去倒车入位,回头看到已经有人在停车了?我们如果在这种环境下不被抢位,还可以准确的倒车入位呢?下...
  • jljiaxiao
  • jljiaxiao
  • 2015年05月29日 00:02
  • 528

udev轻松上路 (做2.6移植的朋友不要错过:)

第一、什么是udev?  这篇文章UDEV Primer给我们娓娓道来,花点时间预习一下是值得的。当然,不知道udev是什么也没关系,  把它当个助记符好了,有了下面的上路指南,可以节省很多时...
  • bbs598598
  • bbs598598
  • 2012年07月07日 16:31
  • 1498
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Scheme&FP上路
举报原因:
原因补充:

(最多只允许输入30个字)