我最近一直在学习Haskell,正在和一位正在通过SICP工作的朋友交谈.我们很想比较Common Lisp和Scheme,所以我决定尝试将练习1.29翻译成Haskell.
本练习使用函数sigma,它表示数学求和函数Sigma.此函数采用函数f应用于每个术语,下限,应用于每个术语以获得下一个术语的函数和上限.它返回应用于每个术语的f的总和.
simpsonIntegral应该使用Simpson规则使用"准确度"n来近似函数f在[a,b]范围内的积分.我无法使这个功能起作用,因为似乎有些东西我不了解所涉及的类型.
这段代码将使用ghc的6.12.1版进行编译,但simpsonIntegral将被赋予一个类型上下文(Integral a,Fractional a),它没有任何意义,只要你调用它就会爆炸.我有一点工作,但我所做的显然是一个黑客,我想在这里询问如何处理这个问题.
如何习惯性地处理h中所需的积分 - >分数/实数转换?我读了很多东西,但似乎没有什么是明显和干净的.
sigma :: (Ord a, Num b) => (a -> b) -> a -> (a -> a) -> a -> b
sigma f a next b = iter a 0
where
iter current acc | current > b = acc
| otherwise = iter (next current) (acc + f current)
simpsonIntegral f a b n = 1.0 * (h / 3) * (sigma simTerm 0 (1+) n)
where
h = (b …Run Code Online (Sandbox Code Playgroud) 我正在编写一个简单的脚本来使用Shelly库并行运行大量任务,但我想限制任何时候运行的最大任务数.该脚本在每行上获取一个带有输入的文件,并为该输入运行任务.文件中有几百个输入,我想一次限制到大约16个进程.
当前脚本实际上使用初始计数为1的QSem限制为1(很好地尝试).我似乎错过了一些东西,因为当我运行带有4个输入的测试文件时,我看到:
Starting Starting Starting Starting Done Done Done Done
所以线程没有像我预期的那样在QSem上阻塞,它们都是同时运行的.我甚至已经实现了我自己的信号量MVar,TVar并且都没有像我预期的那样工作.我显然缺少一些基本的但是什么?我也尝试编译代码并将其作为二进制文件运行.
#!/usr/bin/env runhaskell
{-# LANGUAGE TemplateHaskell, QuasiQuotes, DeriveDataTypeable, OverloadedStrings #-}
import Shelly
import Prelude hiding (FilePath)
import Text.Shakespeare.Text (lt)
import qualified Data.Text.Lazy as LT
import Control.Monad (forM)
import System.Environment (getArgs)
import qualified Control.Concurrent.QSem as QSem
import Control.Concurrent (forkIO, MVar, putMVar, newEmptyMVar, takeMVar)
-- Define max number of simultaneous processes
maxProcesses :: IO QSem.QSem
maxProcesses = QSem.newQSem 1
bkGrnd :: ShIO a -> ShIO (MVar … 我使用优秀的EasyTags插件与vim.我唯一的问题是Exuberant CTags不支持Haskell.但是,有几个程序可以正确生成Haskell vim标记文件,我已经在EasyTags中使用了每个文件类型标记文件选项.
有没有办法告诉EasyTags在每种文件类型的基础上使用不同的ctags程序?我可以编写一个包装脚本并将其设置为全局ctags程序,但更喜欢更清洁的解决方案.
我试过了
:autocmd FileType haskell let g:easytags_cmd = '~/.cabal/bin/lushtags'
Run Code Online (Sandbox Code Playgroud)
但EasyTags似乎试图在ctags程序中查询支持的语言列表,因此当我打开启用了此选项的Haskell文件时,我收到错误.
Run Code Online (Sandbox Code Playgroud)
"Data/Csv/Conduit.hs" [RO] 51L, 1950C
Error detected while processing function xolox#easytags#register..xolox#easytags#get_tagsfi
le..xolox#easytags#supported_filetypes..34_check_filetype:
line 3:
E605: Exception not caught: Failed to get supported languages! (output: Usage: lushtags [op
tions] [--] )
Error detected while processing function xolox#easytags#register..xolox#easytags#get_tagsfi
le..xolox#easytags#supported_filetypes:
line 14:
E171: Missing :endif
Error detected while processing function xolox#easytags#register..xolox#easytags#get_tagsfi
我有以下令人头疼的问题,在此处jshell 11.0.12和17.0.1此处进行了演示
jshell> 13.9f\n$1 ==> 13.9\n\njshell> 13.9\n$2 ==> 13.9\n\njshell> (double) 13.9f\n$3 ==> 13.899999618530273\nRun Code Online (Sandbox Code Playgroud)\n两个版本的简单编译类中都会发生同样的事情
\njshell> 13.9f\n$1 ==> 13.9\n\njshell> 13.9\n$2 ==> 13.9\n\njshell> (double) 13.9f\n$3 ==> 13.899999618530273\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x95\xb0\xe2\x94\x80\xe2\x9e\xa4 java Test \n13.899999618530273\n13.9\nRun Code Online (Sandbox Code Playgroud)\n尽管 17 警告strictfp不再需要
warning: [strictfp] as of release 17, all floating-point expressions are evaluated strictly and \'strictfp\' is not required\nRun Code Online (Sandbox Code Playgroud)\nJLS在第 5.1.2 节中对此进行了说明
\nA widening primitive conversion does not lose information about the overall\nmagnitude of a …Run Code Online (Sandbox Code Playgroud)