Jeff's World

Things that I'm interested in

45
文 章
2
分 类
64
标 签

Haskell学习-monad

什么是Monad

Haskell是一门纯函数式的语言,纯函数的优点是安全可靠。函数输出完全取决于输入,不存在任何隐式依赖,它的存在如同数学公式般完美无缺。可是纯函数因为隔绝了外部环境,连最基本的输入输出都无法完成。而 Monad 就是 Haskell 给出的解决方案。但Monad 并不仅仅是 IO 操作的抽象,它更是多种类似操作之间共性的抽象。所以 Monad 解决的问题并不局限在 IO 上,像 Haskell 中的 Maybe[] 都是 Monad。Haskell 中漂亮的错误处理方式, do 表示法和灵活的列表推导式 (list comprehension) 都算是 Monad 的贡献。

more

Haskell学习-functor

什么是Functor

functor 就是可以执行map操作的对象,functor就像是附加了语义的表达式,可以用盒子进行比喻。functor 的定义可以这样理解:给出a映射到b的函数和装了a的盒子,结果会返回装了b的盒子。fmap 可以看作是一个接受一个function 和一个 functor 的函数,它把function 应用到 functor 的每一个元素(映射)。

-- Functor的定义
class Functor f where
fmap :: (a -> b) -> f a -> f b
more

Haskell学习-高阶函数

高阶函数(higher-order function)就是指可以操作函数的函数,即函数可以作为参数,也可以作为返回结果。有了这两个特性,haskell可以实现许多神奇的效果。

柯里化(Currying)

在haskell中所有的算术运算符都是函数(包括大小于等于关系符等),而它们的快捷方式都可以省略操作数(参数)。

(+) 1 2 -- (+) 是需要两个操作数的函数
> 3

(+1) 2 -- (+1) 是需要左操作数的函数
> 3

(3*) 3 -- (3*) 是需要右操作数的函数
> 6

map (*2) [1,2,3] -- map所有元素 *2 的操作
> [2,4,6]

filter (>3) [2,3,4,5] -- 过滤 >3的元素
> [4,5]
more

Haskell学习-函数式编程初探

为什么要学习函数式编程?为什么要学习Haskell?

.net到前端,C#和JavaScript对我来说如果谈不上精通,最起码也算是到了非常熟悉的程度。这两门语言就像是我的盾牌和宝剑,给我保驾护航,开山劈石,伴随着我不断成长。同时C#和JavaScript它们本身也在不断地进化,不断出现越来越多方便的语法糖,但追根到底很多都是从函数式语言汲取的精华。比如高阶函数,lambada表达式,柯里化等。

于是从探险的角度,以好奇的心态开始学习函数式语言,探索这个宝库,拾取可供临摹的珍宝。最起码它能让你多一个不同的角度看待编程语言,影响你的思考方式。 学习的对象当然选择函数式语言的集大成者-Haskell。

more

WebGL展示3D房屋内景

由于生活和工作上的原因,从年前开始一直到处奔波,没有太多的时间去关注和学习WebGL图形学相关的技术, 不过陆陆续续都有学习使用blender进行3D建模, 而这篇文章涉及到的房屋内景3D建模就是我这段时间以来的学习成果,现在展示出来.

本节实现的效果: Room

more

重返喜马拉雅之尼泊尔ACT篇

  一年后重返喜马拉雅南坡的尼泊尔, 重回那片无数次在我梦里萦绕的壮丽辽阔的高山和雪原, 这次是探寻安娜普尔纳保护区(Annapurna Conservation Area, ACA), 徒步排名世界第一的安娜普尔纳大环线(Annapurna Circuit Trek, ACT), 然后从ACT终点Poon Hill开始重走ABC(Annapurna Base Camp), 最后欣赏冬天雪花飞舞的安娜普尔纳大本营, 所以这次徒步其实是ACT + Poon Hill + ABC组合起来的超级大环线.

2016年喜马拉雅之旅请看:
喜马拉雅之旅(西藏篇)
喜马拉雅之旅(尼泊尔ABC篇)
喜马拉雅之旅(尼泊尔EBC篇)

more

WebGL光照阴影映射

经过前面的学习,webgl的基本功能都已经掌握了,我们不仅掌握了着色器的编写,图形的绘制,矩阵的变换,添加光照,还通过对webgl的基础api封装,编写出了便利的工具库. 是时候进一步深入学习webgl的高级功能了,我认为要做逼真的3D特效,阴影绝对是一个必不可少的环节.现在我们就在之前光照的基础上添加阴影效果吧.

首先看一下阴影效果的实例:
阴影综合(多物体高精度PCF)
点光源聚光灯阴影

more

WebGL多模型光照综合实例

WebGL是一个非常的接近硬件底层的光栅化API, 从非常类似C/C++风格的API调用方式就可以看出来, 习惯了高级语言的我们会觉得很不友好,觉得特别繁琐. 这个也是很多人觉得WebGL难的原因之一. 如果我们要使用WebGL做一些项目,毫无疑问要么使用Three.js之类的3D库, 要么需要对原生的API进行封装. 这段时间查看了一些WebGL工具库的源代码, 参考封装出了一个简单的工具库,这样往后用WebGL做小项目就方便多了.

经过前面章节的学习, WebGL的知识点掌握的差不多了, 终于到了做特效和Demo的阶段了,来看一下这节实现的特效:WebGL多物体多光源场景

more

WebGL学习(3) - 3D模型

相信很多人是以创建逼真酷炫的三维效果为目标而学习webGL的吧,首先我就是😂。我掌握了足够的webGL技巧后,正准备大展身手时,遇到了一种尴尬的情况:还是做不出想要的东西😭。为啥呢,因为没有3D模型可供操作啊,纯粹用代码构建复杂的3D模型完全不可想象。

必须使用3dMax,maya,以及开源的blender等建模软件进行构建。既然已经入了webGL的坑了,那也只能硬着头皮继续学习3D建模,断断续续学了一个多月的blender教程,总算入门了。

这节主要学习如何导入模型文件,然后用代码应用效果,操作模型。首先展示下我的大作,喷火战斗机的3D模型:webGL 喷火战斗机

more

扫一扫,分享到微信

Powered by Hexo Theme simply

Copyright © 2020 Jeff Zhong

给我的早餐加个蛋吧 😊

weixinpay alipay