近日的学习日记
来源:互联网 发布:处方软件 编辑:程序博客网 时间:2024/04/28 10:55
前段时间忙于毕设,没有多少时间学习。现在终于可以快乐的读代码了。
2014.5.17-5.18
学习:计算机程序设计艺术(高纳德) 晚清七十年
Yield关键字的用法:yield return 返回的是迭代器
Contract:契约,interface即是contract.Template is alsocontract.
CPS变换.
λ-calculus程序.
MMIX指令集.
conceptmapping.
一定要读王垠(Yin)博客.
学习Scheme
coLinux,最为方便的是它可以直接在Windows中运行——甚至可以作为服务启动!它是我学习Linux的最好的仿真平台之一.
学习王垠博客里的解释器
学习g9yuayon博客里的”与Scheme共舞”
用Scheme实现小计算器
(define calc
(lambda (exp)
(match exp ; 匹配表达式的两种情况
[(? number? x) x] ; 是数字,直接返回
[`(,op ,e1 ,e2) ; 匹配并且提取出操作符 op 和两个操作数 e1, e2
(let ([v1 (calc e1)] ; 递归调用 calc 自己,得到 e1 的值
[v2 (calc e2)]) ; 递归调用 calc 自己,得到 e2 的值
(match op ; 分支:处理操作符 op 的 4 种情况
['+ (+ v1 v2)] ; 如果是加号,输出结果为 (+ v1 v2)
['- (- v1 v2)] ; 如果是减号,乘号,除号,相似的处理
['* (* v1 v2)]
['/ (/ v1 v2)]))]))) ;调用方式 (calc '(+ 1 2))
5.26
谨记递归的扩展与收缩.
For example:
(define factoral(lambda(x)
(if(<=x 1) 1
(* x(factoral(-x 1))))))
基础结构:
(1)if… (if(test) (cond1)(cond2)) if test istrue,then cond1,else cond2.
(2)cond…else 类似于switch…case (cond((test) op1)((test)op2)… (else op))
(3)case…else 格式类似于cond…else 操作list,向量表,不同的是case(cond1)(res1return1)(res2 return2)的cond是一个表达式,而不是true or false,只要下面的res中包含cond1的计算结果,则返回响应的return值.
例:(case (* 2 3)((2 35 7) ‘prime)((1 4 6 8 9) ‘composite))
2*3结果为6,返回当然是composite
(4)and or 运算符 (运算符当然要提前)
(5)循环由递归实现
(6)let
(7)apply
(8)map
(9)string? boolean?
(10)car cdr
(11)eval delay for-each force call-with-current-continuation
(12)输入输出
5.27
读书:TheLittle Schemer
定义atom?:
(define atom?
(lambda (x)
(and (not (pair? x)) (not (null?x)))))
基础概念car cdr consnull? eq?
定义lat?(list ofatoms,(a a a)is lat,but ((a) a a) is not lat)
(define lat?
(lambda(l)
(cond
((null? l) #t)
((atom? (car l)) (lat? (cdr l)))
(else #f))))
6.3
`:反引号.作用:对加了,标记的所有东西求值.如:`(a b c),若c为5,则结果为(a b 5)
对照王垠的calc代码,即可读懂那个简单的计算器(见第一页).
想起C++写的计算器,代码500行都不止,并且实现不了括号嵌套,这时还谈什么效率,无论是代码的精简还是效率Scheme都完爆C++.这个时代的人们喜欢人云亦云,从来不懂得自己亲自的尝试.一味的吹嘘C语系的语言,忽视真正的伟大的编程思想,眼界狭隘到无从辨别真理,何谈所谓的发明与创新,连继承都做不到.不站在伟人的肩上永远看不到更加旖旎的风光.抱残守缺敝帚自珍的井底之蛙永远不知道外面的世界有多么大!
递归是编程语言中最重要的,没有之一.
Recurring is the mostimportant in the program language!
Just choose Scheme andbelieve it can change the world one day.
If I can say,I will saythat I have a dream that I want to develop a new program language which iselegant and powerful just like Scheme or if I can-exceed Scheme one day.
6.10.2014
认清现实,看清自身的优劣.抛弃过去,追逐未来.将来的日子是一个人的战争.不要考虑无关的东西了.不要胡思乱想了.忘掉自己的审美观,忘掉自己的喜好.忘掉虚妄不实的自己,找回本性.
在lambda算子中,任何以空格隔开的都是函数调用.
let IfThenElse = lambdacond true_expr false_e xpr . cond true_expr false_expr
.后边cond为函数,另外两个是cond参数.而不是三个无关的变量.一切都是函数调用.
let Y = lambda y. (lambdax. y (x x)) (lambda x. y (x x))
后边两个lambda式,前一个是函数,后一个是参数.一切都是函数调用.
Remember:All are function call.
读完了g9yuayon负暄琐话 的关于lambda演算的几篇文章,对于lambda有了新的认识.alpha变换(无非是给混淆的参数名取另一个名字),beta简化(无非是带入参数).
Y combinator使本没有递归的lambda算子实现了递归.参考Lambda算子5a:<Why oh why Y - 负暄琐话>以及<康托尔、哥德尔、图灵——永恒的金色对角线(rev#2) - 刘未鹏_C++的罗浮宫>.
6.11.2014
beta简化:
->看来beta简化需要每次带入参数是去掉函数定义头,比如lambda x.x x,代入lambda y.y x,成为lambda y.y x lambda y.y x;应该是这样.前后为函数调用关系,即f(f(x)).高阶函数.
今日读了The LittleSchemer的第九章.第九章实现了Y combinator.从无到有实现递归.
读了g9yuayon的S K I组合子相关的文章.
- 近日的学习日记
- 近日关于Java多线程的学习
- 近日关于Java反射的学习
- 近日在学习。
- 近日学习有感
- 近日ps学习分享
- C语言:近日学习遇到的问题整理
- 近日的教训
- 近日的活动小结
- 近日的感受
- 近日
- 近日
- 近日
- 近日
- 近日
- 近日
- 我的学习日记!
- W32Dasm 的学习日记
- PowerDesigner 学习之数据仓库连接
- Leetcode Add Binary
- IReport+JasperReports实现Flash报表显示(带查询功能)
- POJ 1573 Robot Motion (经典模拟)
- fedora美化桌面(两句命令拥有cairo-dock)
- 近日的学习日记
- 移植ubuntu或者debian到BeagleBone Black
- C# virtual和abstract的区别
- uClibc 交叉编译方法
- 调试了很久,原来是这个问题
- mac下解决MySQL中文乱码的问题
- 验证码的Servlet实现
- WIN8.1安装MBR磁盘无法安装问题
- Shell遍历文件内容