教 程 目 录
Haskell教程
Haskell是一种广泛使用的纯功能语言.功能编程基于数学函数.除了Haskell之外,一些遵循功能编程范例的其他流行语言包括:Lisp,Python,Erlang,Racket,F#,Clojure等.Haskell比其他流行的编程语言(如Java,C,C ++,PHP等)更智能.在本教程中,我们将使用相关示例讨论Haskell的基本概念和功能,以便于理解.
受众
本教程已准备就绪让初学者让他们理解使用Haskell作为编程语言的函数式编程的基本概念.
先决条件
虽然这是初学者的教程,我们假设读者对任何编程环境有合理的了解,并且对变量,命令,语法等基本概念有所了解.
本文地址:https://www.itbaoku.cn/tutorial/haskell-index.html
相关问答
此代码恰好编译: data None = None { _f :: Int } type Simpl = Env type Env = Int 但是,我对此代码有一个错误: {-# LANGUAGE TemplateHaskell #-} import Control.Lens data None = None { _f :: Int } type Simpl = Env makeLenses ''None type Env = Int 错误: Not in scope: type constructor or class `Env' 我刚刚在类型声明之间添加了一行makeLenses ''None 这意味着TemplateHaskell代码可以更改类型构造函数的范围? 有人知道有关此问题的细节(或如何避免此问题)吗? 解决方案 如果您按以下方式重新排序代码,则可以使用: {-# LANGUAGE TemplateHaskell #-} import Control.Lens data None = None { _f :: Int } type Simpl = Env type Env = Int makeLenses ''None 当您使用模板haskell拼接将新的顶级声明添加到代码中时,就像makeL
)
哈斯克尔有多懒? 为什么以下内容不知道何时停止? sum ([n^2 | n if odd (n^2) && (n^2
)
我正在尝试在我的haskell代码中使用此模块:> http://hackage.haskell.org/package/missingh-1.0.0.0.0/docs/data-string-utils.html 使用函数"替换" - 但是,当我尝试此代码时: import Data.String.Utils haskell告诉我没有这样的模块. 我该怎么办? 解决方案 您没有安装模块,这就是问题所在. :) MissingH并未使用标准Haskell安装分发 - 这是您可以安装的模块,但您必须先下载它. cabal,Haskell软件包安装程序(这是Haskell easy_install对Python或cpan是perl)将为您做到这一点. 按照 for Windows for Windows 的Cabal页面上的指示.一旦安装cabal.exe,请 cabal.exe update cabal.exe install MissingH (Data.String.Utils在Misssingh模块中.)
)
我试图在Haskell中理解无点编程,并且我对一些示例进行了疑问,因为我不太了解发生错误时给出的解释. 1)我在下面定义了一个周期函数: myCycle :: [a] -> [a] myCycle = foldr (++) [] . repeat 为什么myCycle = foldr (++) [] $ repeat不起作用? 2)添加列表的每个元素,然后添加另一个列表 sum :: [Int] -> [Int] -> [Int] sum s = zipWith (+) . map (+ 2) $ s 为什么该函数与sum s = zipWith (+) $ map (+ 2) s具有相同的结果,为什么sum l1 l2 = zipWith (+) . map (+ 2) $ l1 $ l2不起作用 解决方案 首先,让我们列出所有类型: foldr :: (a -> b -> b) -> b -> [a] -> b (++) :: [a] -> [a] -> [a] [] :: [a] repeat :: a -> [a] (.) :: (b -> c) -> (a -> b) -> a -> c ($) :: (a -> b) -> a -> b foldr (++) :: [a] -
)
我是Haskell的新手,并试图了解一些事情.如果我这样做以下我会收到一个问题: list1 = [1..] list2 = [x | x print list2 [1,2,3,4 这里发生了什么? 解决方案 您知道该列表在单调上增加,但Haskell却没有.使用takeWhile,而不是列表的理解,因此list1找到大于4的值后可以停止评估. > list1 = [1..] > list2 = takeWhile ( print list2 [1,2,3,4] 其他解决方案 发生的事情是仍在计算list1,并且针对list1谓词x
)
我想了解如何评估Haskell Foldr的以下代码. k x y = x foldr k 1 [0..5] 结果是0,但我不明白为什么它为零?我想认为x是列表中的任何元素是y.有人可以向我解释吗?我在线搜索了它,但找不到任何有用的东西. 解决方案 haskell wiki 有一些有用的信息有关如何解释foldr图片: 您可以看到您的表达方式如何扩展到: 0 `k` (1 `k` ... (5 `k` 1)))))
)