博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
programming language part b 第一周作业
阅读量:5062 次
发布时间:2019-06-12

本文共 2799 字,大约阅读时间需要 9 分钟。

代码

#lang racket(provide (all-defined-out)) ;; so we can put tests in a second file;; put your code below;1(define (sequence low high stride)  (if (> low high)      '()      (cons low (sequence (+ stride low) high stride))));2(define (string-append-map xs suffix)  (map (lambda (el) (string-append el suffix)) xs));3(define (list-nth-mod xs n)  (let ([xl (length xs)])      (cond        [(< n 0) (error "list-nth-mod: negative number")]        [(= 0 xl) (error  "list-nth-mod: empty list")]        [else (car (list-tail xs (remainder n xl)))])));4(define (stream-for-n-steps s n)  (if (= n 0)      '()      (cons (car (s)) (stream-for-n-steps (cdr (s)) (- n 1)))));5(define funny-number-stream  (letrec ([f (lambda (x) (cons                           (if (= 0 (remainder x 5))                               (- x)                               x)                           (lambda () (f (+ x 1)))))])    (lambda () (f 1))));6(define dan-then-dog  (letrec ([f (lambda (x) (if (string=? x "dan.jpg")                              (cons "dan.jpg" (lambda () (f "dog.jpg")))                              (cons "dog.jpg" (lambda () (f "dan.jpg")))))])    (lambda () (f "dan.jpg"))));7(define (stream-add-zero s)  (letrec ([f (lambda (s) (cons (cons 0 (car (s))) (lambda () (f (cdr (s))))))])    (lambda () (f s))));8(define (cycle-lists xs ys)  (letrec ([f (lambda (n) (cons (cons (list-nth-mod xs n) (list-nth-mod ys n))                                (lambda () (f (+ n 1)))))])    (lambda () (f 0))));9(define (vector-assoc a vec)  (letrec ([f (lambda (n) (cond                            [(>= n (vector-length vec)) #f]                            [(not (pair? (vector-ref vec n))) (f (+ n 1))]                            [(equal? (car (vector-ref vec n)) a) (vector-ref vec n)]                            [else (f (+ n 1))]))])    (f 0)));10(define (cached-assoc xs n)  (letrec ([cache (make-vector n #f)]           [index 0]           [f (lambda (v) (let ([vres (vector-assoc v cache)])                           (cond                            [vres vres]                            [(not vres) (let ([xres (assoc v xs)])                                          (cond                                            [xres (vector-set! cache index xres)                                                  (set! index (remainder (+ 1 index) n))                                                  xres]                                            [(not xres) #f]))])))])    f))

思考

Coursera提交有点问题,第一天GG了,第二题一模一样却过了

都是很有意思的几个流或者函数

这里有点不好的地方是,我又有个处理流的函数对流进行了重复计算


知识点回顾

1.和scheme不同的是,cons形成的list是不能更改的,要使用可以改的请用mcons

2.用thunk实现惰性求值,这是sicp讲过的
3.避免重复计算,也是我代码中不好的地方
4.定义流和使用流,,流就是一个thunk,求值后car中是值,cdr是一个thunk即另一个流
5.memoization技术来避免重复求值
6.宏的编写,syntax-rules中放的是其他的关键字

转载于:https://www.cnblogs.com/tclan126/p/8926308.html

你可能感兴趣的文章
CoreMontion加速计
查看>>
【php】PDO
查看>>
Find the longest route with the smallest starting point
查看>>
hashMap的源码实现
查看>>
jquery selector 2
查看>>
NSIS API 函数常用备份
查看>>
STL之list(双向链表)
查看>>
朴素贝叶斯应用:垃圾邮件分类
查看>>
php中的常用数组函数(七) 数组合并 array_merge()和array_merge_recursive()
查看>>
《DSP using MATLAB》 Problem 4.9
查看>>
extern "c"
查看>>
利用CSS3-boxshadow绘制“蒙娜丽莎的微笑”
查看>>
scanf()函数
查看>>
USACO4.1.2--Fence Loops
查看>>
MyBatis 一级缓存和二级缓存及ehcache整合
查看>>
未来计算机发展趋势
查看>>
list转datatable,SqlBulkCopy将DataTable中的数据批量插入数据库
查看>>
结构模式--之--门面模式
查看>>
xcode 出现the file couldn't be opened
查看>>
StartOS使用初体验
查看>>