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)))))))

MS-OTN新手上路_完整版

  • 2016年12月14日 15:46
  • 6.9MB
  • 下载

Git新手上路,个人学习笔记

git clone: git clone 地址 cd volunteer-platform/ git checkout develop (cd app/framework/是空的) git submo...

PHP 新手上路 中文 教程

  • 2010年06月18日 15:32
  • 336KB
  • 下载

PHP新手上路中文教程

  • 2009年08月10日 12:31
  • 314KB
  • 下载

新手上路学习配置C,C++,GTK等开发环境

from:http://forum.ubuntu.org.cn/viewtopic.php?t=40971本人想学习一下Linux下的C,C++程序开发,这几天一直在研究Linux下的C语言编译环境的...

Photoshop 技能167个-新手上路必备

  • 2012年03月21日 16:27
  • 1.56MB
  • 下载

PHP新手上路中文教程(CHM)

  • 2012年04月03日 10:29
  • 336KB
  • 下载

新手上路系列8:进程控制的相关知识

1、首先,进程的即是指程序执行的实例,它是运行中的程序。进程的状态包括三种:执行、就绪和阻塞状态。 执行状态的进程占用着CPU,而就绪状态的进程则是在等待分配CPU,最后的阻塞状态就是更低一级的状态,...

新手上路_C语言教程

  • 2016年04月14日 13:26
  • 44KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Scheme&FP上路
举报原因:
原因补充:

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