- 博客(18)
- 收藏
- 关注
原创 C++17尝鲜:类模板中的模板参数自动推导
模板参数自动推导在C++17之前,类模板构造器的模板参数是不能像函数模板的模板参数那样被自动推导的,比如我们无法写std::pair a{1, "a"s}; // C++17而只能写std::pair<int, string> a{1, "a"s}; // C++14为了弥补这一缺陷,标准库为我们提供了 std::make_pair 函数,通过函数模板的模板参数自动推导的功能, 免去我们在构造 p
2017-10-29 12:14:58 3016
原创 Haskell语言学习笔记(34)System.Environment
System.EnvironmentgetArgs :: IO [String] getProgName :: IO String getExecutablePath :: IO FilePathgetArgs 这个 IO Action 读取所有的命令行参数,返回一个字符串数组。 getProgName 这个 IO Action 返回程序的名字。 getExecutablePath 这个 I
2017-10-28 22:09:33 356
原创 Haskell语言学习笔记(33)Exception, Except, ExceptT
Exceptionclass (Typeable e, Show e) => Exception e where toException :: e -> SomeException fromException :: SomeException -> Maybe e toException = SomeException fromException (SomeExce
2017-10-28 22:09:02 686
原创 Haskell语言学习笔记(32)Data.Maybe, Data.Either
Data.MaybePrelude Data.Maybe> maybe "" show (Just 5)"5"Prelude Data.Maybe> maybe "" show Nothing""Prelude Data.Maybe> isJust (Just 3)TruePrelude Data.Maybe> isJust NothingFalsePrelude Data.Mayb
2017-10-28 22:08:27 868
原创 Haskell语言学习笔记(31)ListT
Control.Monad.Trans.List标准库中的 ListT 的实现由于有 bug,已经被废弃。list-t 模块这里使用 list-t 模块中的 ListT。 list-t 模块需要安装 ListT done right$ cabal install list-tlist-t-1.0.0.1Prelude> :m +ListTPrelude ListT> ListT Monad
2017-10-28 22:07:46 369
原创 Haskell语言学习笔记(30)MonadCont, Cont, ContT
MonadCont 类型类class Monad m => MonadCont m where callCC :: ((a -> m b) -> m a) -> m ainstance MonadCont (ContT r m) where callCC = ContT.callCCclass Monad m => MonadCont m where MonadState 是个
2017-10-22 13:41:54 779
原创 Haskell语言学习笔记(29)CPS
CPS (Continuation Passing Style)add :: Int -> Int -> Intadd x y = x + ysquare :: Int -> Intsquare x = x * xpythagoras :: Int -> Int -> Intpythagoras x y = add (square x) (square y)add_cps :: Int ->
2017-10-18 08:28:30 513
原创 Haskell语言学习笔记(28)Data.Map
Data.MapOperatorsPrelude Data.Map> fromList [(5,'a'), (3,'b')] ! 5'a'Prelude Data.Map> fromList [(5, 'a'), (3, 'b')] !? 1 NothingPrelude Data.Map> fromList [(5, 'a'), (3, 'b')] !? 5Just 'a'QueryPr
2017-10-18 08:25:44 10503
原创 C++17尝鲜:在 if 和 switch 语句中进行初始化
初始化语句在C++17中,类似于 for 语句,在 if 和 switch 语句的判断条件之前也能加上初始化语句,语法形式如下:if (初始化语句; 条件) 语句 else 语句switch (初始化语句; 条件) 语句这里的初始化语句是可选的,它可以是初始化表达式,也可以是变量声明。带初始化语句的 if 和 switch 语句在语义上相当于:{ 初始化语句; if (条件) 语句
2017-10-18 08:23:22 3403
原创 Functional Java 学习笔记
Functional JavaFunctional Java是一个在Java语言中实现函数型编程范式的类库。 从接口上看,该类库似乎与Haskell语言关系密切,接口的方法名很多来自该语言。<!-- https://mvnrepository.com/artifact/org.functionaljava/functionaljava --><dependency> <groupId>o
2017-10-15 14:08:11 1896
原创 Haskell语言学习笔记(27)Endo, Dual, Foldable
Endo Monoidnewtype Endo a = Endo { appEndo :: a -> a }instance Monoid (Endo a) where mempty = Endo id Endo f `mappend` Endo g = Endo (f . g)Endo 是个 newtype,也就是对现有类型的封装。 Endo a 封装的是一个自
2017-10-15 13:13:18 648
原创 Haskell语言学习笔记(26)Identity, IdentityT
Identity Monadnewtype Identity a = Identity { runIdentity :: a }instance Functor Identity where fmap = coerceinstance Applicative Identity where pure = Identity (<*>) = coerceins
2017-10-15 13:12:42 502
原创 Haskell语言学习笔记(25)MonadState, State, StateT
MonadState 类型类class Monad m => MonadState s m | m -> s where get :: m s get = state (\s -> (s, s)) put :: s -> m () put s = state (\_ -> ((), s)) state :: (s -> (a, s)) -> m a sta
2017-10-15 13:12:03 766
原创 Haskell语言学习笔记(24)MonadWriter, Writer, WriterT
MonadWriter 类型类class (Monoid w, Monad m) => MonadWriter w m | m -> w where writer :: (a,w) -> m a writer ~(a, w) = do tell w return a tell :: w -> m () tell w = writer ((),
2017-10-15 13:11:22 751
原创 Haskell语言学习笔记(23)MonadReader, Reader, ReaderT
MonadReader 类型类class Monad m => MonadReader r m | m -> r where ask :: m r ask = reader id local :: (r -> r) -> m a -> m a reader :: (r -> a) -> m a reader f = do r <- ask
2017-10-15 13:10:28 692
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人