在许多MSIL列表中,我观察到以下内容:
System.Nullable`1<!0> etc ...
Run Code Online (Sandbox Code Playgroud)
要么
class !0 etc ...
Run Code Online (Sandbox Code Playgroud)
!0
在这些情况下,这意味着什么?
我的问题是,标准ML的模块系统和OCaml模块系统之间是否有任何区别?OCaml是否有所有对仿函数,归属等的支持...... SML有哪些?
在.Net 4中,有两个函数可以枚举路径中的文件.EnumerateFiles和EnumerateFileSystemEntries.MSDN没有对它们的差异给出足够的解释.这些差异是什么?
在面向对象语言中定义类时,它通常会设置成员变量的默认值.Haskell中是否有任何机制可以在记录类型中执行相同的操作?还有一个后续问题:如果我们从一开始就不知道数据构造函数的所有值,但我们从IO交互中获取它们,我们可以使用OOP中的构建器模式来构建类型吗?
提前致谢
我已经在Windows 7中安装了Haskell Platform 2012.我在控制台中写道cabal update
,我发信息说有一个新版本的cabal.我写cabal install cabal-install
.安装完成后,它告诉我cabal已安装在C:\ username\AppData\Roaming\cabal中.因此,当我cabal update
再次这样做时,我正在采取相同的信息来安装新版本的cabal.我试图从配置文件更改cabal目录,但cabal忽略配置文件.Haskell只能在Unix上运行吗?谢谢
monad构造如何帮助维持纯度(在Haskell中),同时做出不纯净的东西?例如,当你给出的print "Hello"
是执行纯粹或不纯的代码时?这是一个非常微妙的细节,但有助于更好地理解功能语言中纯度和杂质的概念.
我是Haskell的新手,我正在阅读"Real World Haskell"这本书 .在本书的第4章中,作者要求使用fold重写groupBy函数.本书的一位读者(Octavian Voicu)给出了以下解决方案:
theCoolGroupBy :: (a -> a -> Bool) -> [a] -> [[a]]
theCoolGroupBy eq xs = tail $ foldr step (\_ -> [[]]) xs $ (\_ -> False)
where step x acc = \p -> if p x then rest p else []:rest (eq x)
where rest q = let y:ys = acc q in (x:y):ys
Run Code Online (Sandbox Code Playgroud)
我的问题很简单:我知道foldr有3个参数:一个函数,一个初始值和一个列表.但在代码的第二行,foldr需要4个参数.为什么会这样? 谢谢.
我想学习一门功能语言,以拓宽视野.我对Python和C/C++有所了解,并希望从一个来自语言命令领域的人那里学习一门语言.我不在乎语言是否足够强大.我只是想要一种语言来学习函数式编程的基础,然后我会尝试更难(和更强大的语言).
谢谢
下面的代码
getSpareBuffer :: Handle__ -> IO (BufferMode, CharBuffer)
getSpareBuffer Handle__{haCharBuffer=ref,
haBuffers=spare_ref,
haBufferMode=mode}
= do
case mode of
NoBuffering -> return (mode, error "no buffer!")
_ -> do
bufs <- readIORef spare_ref
buf <- readIORef ref
case bufs of
BufferListCons b rest -> do
writeIORef spare_ref rest
return ( mode, emptyBuffer b (bufSize buf) WriteBuffer)
BufferListNil -> do
new_buf <- newCharBuffer (bufSize buf) WriteBuffer
return (mode, new_buf)
Run Code Online (Sandbox Code Playgroud)
来自GHC源代码.我想知道为什么这段代码的作者在参数的位置使用花括号.以及变量haCharBuffer,haBuffers,haBufferMode如何从ref,spare_ref和mode中获取值.这些值尚未定义.代码文件是ghc-7.4.1\libraries\base\GHC\IO\Handle\Text.hs
GHC代码的另一部分代码需要澄清:
flushByteWriteBuffer :: Handle__ -> IO ()
flushByteWriteBuffer h_@Handle__{..} = do
bbuf <- …
Run Code Online (Sandbox Code Playgroud) 我编写了以下代码,它创建了一个无限的Fibonacci数列表:
fibs = 1:1:fib 1 1
where fib a b = a+b:fib b (a+b)
Run Code Online (Sandbox Code Playgroud)
上面的代码可以使用foldl
或foldr
避免递归吗?