自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

转载 R语言里的“宏”

最近在看R,不过还是习惯性地对语言特性感兴趣。R也可以操作代码本身,有一个类似lisp 宏的系统。不过他更像IO language,利用延迟计算+代码操作,可以完成类似lisp宏的功能,定义新的“语法结构”。 一个例子: 我们实现一种机制可以部分地给一个函数的参数来得到一个新的函数(柯瑞化)。 比如我们有一个函数如下: f <- function(a, b, c) a 如果我...

2015-04-07 16:35:00 1042

转载 haskell中类型的等价表示(2)–Sum

前面给了一个Product的等价表示,还有一种是Sum的。 同样的先给出两种表示。 表示: data S a b = L a | R b 等价的表示: newtype S' a b = S' { unS' :: forall r. (a -> r) -> (b -> r) -> r } 证明: 这里对于S’,forall r限制了可...

2015-03-23 23:45:00 291

转载 haskell中类型的等价表示(1)–Product

这里我想讨论下一些haskell类型的等价表示。对于一个类型我们可以给出不同的表示。通常我们会使用所谓代数数据结构,但是其实那不是必须的。我们需要的是函数,以及RankNTypes。 表示: 通常我们使用data定义一个product如下。 data P a b = P a b 等价的我们可以用一个函数类型来表示‘同样的类型’。 newtype P' a b ...

2015-03-23 18:06:00 259

转载 Lens in Scala

函数式访问器在haskell里被叫做Lens。在面向对象语言里这个没有什么必要,不过作为练习,我们看如何在scala表示van Laarhoven lens. 先给出haskell里的lens类型: type Lens s a = forall f. Functor f => (a -> f a) -> (s -> f s) 这里有一个全局量词for...

2015-03-16 12:40:00 198

转载 在scala中使用for表达式做monad运算

在haskell中,我们有语法糖‘do’帮助表达monad运算。scala中我们也有相应语法糖‘for’。 for表达式会被scala compiler做一些变换,简单的例子如下: for { a <- foo b <- bar } yield (a + b) ===> foo.flatMap((a) => { bar.map((b) =&...

2015-03-12 13:21:00 156

转载 State Monad in C++

一个C++版本的State Monad。 需要C++11。 #include <functional> template<template<typename> class M> struct Monad { template<typename A> M<A> ret(A); template&lt...

2015-03-11 20:50:00 265

转载 Monad in Scala

Scala有很强的类型系统。加上一些隐式规则,我们可以在scala里模拟haskell的monad。 先从haskell的monad type class开始: class Monad M where ret :: a -> M a bind :: M a -> (b -> M b) -> M b 这里M是type class的参数。它是一个高阶类...

2015-03-11 00:05:00 163

转载 Rust 还不支持higher-kinded types

最近又尝试了Rust,发现变化了好多。以前比较像走scala的路线,现在似乎定了方向,作为system language所以砍掉了很多东西。 看到trait就想到了haskell的type class,所以试了试看能不能实现一个monad。不过不幸的是,马上发现它的generic不支持高阶参数。 不过,Rust似乎并不反对加入higher-kinded types,而且因为是向后兼容...

2015-03-04 13:40:00 226

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除