我需要对Haskell的懒惰做一些澄清.
如果我有这个功能:
myFunction arg
| arg == 1 = a
| arg == 2 = a*b
| arg == 3 = b+c
| otherwise = (a+b)*c
where
a = ...
b = ...
c = ...
d = ...
Run Code Online (Sandbox Code Playgroud)
当我打电话时myFunction 1,Haskell将只评估a = ...函数,既不是b也不是c,也不是d.
但如果我写
myFunction arg
| arg == 1 = a
| arg == 2 = a*b
| arg == 3 = b+c
| otherwise = (a+b)*c
where
(a,b,c,d) …Run Code Online (Sandbox Code Playgroud) 我正在尝试用hakyllin markdownvia写一篇文章pandoc。
我成功地添加了一些图片、表格和代码块markdown。但是,我想将我的图片和一些文字段落居中。
是否有可能中心的文字和配图pandoc和markdown标记语言?
是否存在提供工程符号格式(如String)的现有Haskell函数?
如果没有,我读到printf可以通过添加实例来扩展PrintfArg.你相信这是一个很好的解决方案吗?
通过工程符号,我的意思是指数符号,其指数是3的倍数.
floating-point formatting haskell scientific-notation floating-point-precision
我正在尝试使用Perl对具有特定字母顺序的名称列表进行排序,以执行一些特殊功能.
排序的工作方式sort { $a cmp $b }与使用不同连续字母的方式相同.
例如,使用任意字符顺序"abdrtwsuiopqe987654"进行排序......
我试图处理,sort { $a myFunction $b }但我是Perl的新手,我不知道如何正确组织myFunction以获得我想要的东西.
cmp使用Perl实现的功能,看它是如何工作的?我正在尝试使用Haskeline实现自动完成功能:
import System.Console.Haskeline
import System.Console.Haskeline.IO
import Data.List
mySettings :: Settings IO
mySettings = defaultSettings {
historyFile = Just "myhist"
, complete = completeWord Nothing " \t" $ return . search
}
keywords :: [String]
keywords = ["Point","Line","Circle","Sphere"]
search :: String -> [Completion]
search str = map simpleCompletion $ filter (str `isPrefixOf`) keywords
main :: IO ()
main = do
inputLine <- initializeInput mySettings
putStrLn "done"
Run Code Online (Sandbox Code Playgroud)
但我对这个GHC错误感到有点失望:
Ambiguous type variable `t0' in the constraint:
(Control.Monad.IO.Class.MonadIO t0)
arising from a …Run Code Online (Sandbox Code Playgroud) 我正在研究一个小型符号库,用Haskell执行一些计算.
为了表示符号操作,我创建了这种数据类型:
data MathExpress = -- A math expression
MathDouble Double -- Represent a number
| MathAdd MathExpress MathExpress -- Add 2 expressions
| MathSoust MathExpress MathExpress -- Subtract 2 expressions
| ...
Run Code Online (Sandbox Code Playgroud)
我设法创建一个Num实例,以便能够使用运算符+和-我的类型MathExpress.
instance Num MathExpress where
(+) (expa) (expb) = MathAdd expa expb
(-) (expa) (expb) = MathSoust expa expb
...
Run Code Online (Sandbox Code Playgroud)
当我写:
( MathExpress expression ) * MathDouble 2.0
Run Code Online (Sandbox Code Playgroud)
它的工作原理!
现在,我希望能够使用+和-数字(Double或Int)编写更简单:
( …Run Code Online (Sandbox Code Playgroud) 模式匹配是否可以匹配一系列值?例如 :
Haskell中是否有内置函数以递归方式将参数列表应用于参数?
我有一个应用于Double(乘法,加法,...)的操作列表,我想简单地得到结果.例如 :
operationList = [
(\v -> v/8+2)
, (\v -> v-12)
, (\v -> v*v)
]
func operationList 3
Run Code Online (Sandbox Code Playgroud)
func应该回来92,640625.
我在hoogle搜索签名,[(a -> a)] -> a -> a但我没有找到任何东西.
我想根据元数据值过滤我网站的一些帖子。我想创建一个名为status(like titleor date)的特定元数据,它可以采用多个值(草稿、已发布、存档):
---
title: The title
author: Myself
date: 2016-11-29
tags: tag1, tag2
status: draft
---
Run Code Online (Sandbox Code Playgroud)
根据status元数据的价值,该帖子是否应该发布。
我查看了 hackage 文档,但不确定要使用的功能。
你知道如何用 Hakyll 做到这一点吗?
我正在为 Haskell 模块编写文档,其中包含大量测试和示例。这使我的源文件很长(3000 行)。
我的想法是用我的完整示例和文档(没有函数定义)制作第二个源文件 (*.hs)。但是当我编写文档时,我的标题无法正确显示:
module JeanJouX.Numeric.Tests (
-- | Introduction to my module
--
-- * Section 1
-- ** Sub section 1
-- doc text
-- ...
-- * Section 2
-- ** Sub section 1
--
Run Code Online (Sandbox Code Playgroud)
但是当我像这样打破我的来源时:
module JeanJouX.Numeric.Tests (
-- | Introduction to my module
--
-- * Section 1
-- ** Sub section 1
-- doc text
-- ...
-- * Section 2
-- ** Sub section 1
--
Run Code Online (Sandbox Code Playgroud)
我的文档文本没有出现(我认为 Haddock 正在等待函数导出)。
是否可以仅以 …