小编Mat*_*W-D的帖子

在Haskell中使用Logic Monad

最近,我在Haskell中实现了一个天真的DPLL Sat解算器,改编自John Harrison的实用逻辑和自动推理手册.

DPLL是各种回溯搜索的,所以想要使用所述实验逻辑单子奥列格Kiselyov等.但是,我真的不明白我需要改变什么.

这是我得到的代码.

  • 使用Logic monad需要更改哪些代码?
  • 额外奖励:使用Logic monad有什么具体的性能优势吗?

{-# LANGUAGE MonadComprehensions #-}
module DPLL where
import Prelude hiding (foldr)
import Control.Monad (join,mplus,mzero,guard,msum)
import Data.Set.Monad (Set, (\\), member, partition, toList, foldr)
import Data.Maybe (listToMaybe)

-- "Literal" propositions are either true or false
data Lit p = T p | F p deriving (Show,Ord,Eq)

neg :: Lit p -> Lit p
neg (T p) = F p
neg (F p) …
Run Code Online (Sandbox Code Playgroud)

logic haskell backtracking

23
推荐指数
2
解决办法
2482
查看次数

haskell - 使用QuickCheck的平均浮点错误

我使用QuickCheck-2.5.1.1进行QA.我测试两个纯函数gold :: a -> Floatf :: a -> Float,其中a实例随心所欲.

gold是参考计算,f是我正在优化的变体.

到目前为止,我使用quickcheck的大多数测试都使用了类似的测试\a -> abs (gold a - f a) < 0.0001.

但是,我想收集统计数据并检查阈值,因为知道平均误差和标准偏差对指导我的设计很有用.

有没有办法使用QuickCheck来收集这样的统计数据?


具体例子

为了给出我正在寻找的那种东西的具体例子,假设我有以下两个函数来近似平方根:

-- Heron's method
heron :: Float -> Float
heron x = heron' 5 1
    where
      heron' n est
          | n > 0 = heron' (n-1) $ (est + (x/est)) / 2
          | otherwise = est

-- Fifth order Maclaurin series expansion
maclaurin :: Float …
Run Code Online (Sandbox Code Playgroud)

haskell qa mean quickcheck standard-deviation

13
推荐指数
1
解决办法
563
查看次数

慢茱莉亚启动时间

我正在探索使用Julia作为通用科学计算语言(而不是python),但它的启动时间非常缓慢.

有没有办法加速这个?

$ time python -c 'print "Hello"'
Hello

real    0m0.030s
user    0m0.018s
sys 0m0.010s

$ time julia -e 'println("Hello")'
Hello

real    0m4.614s
user    0m4.644s
sys 0m0.116s
Run Code Online (Sandbox Code Playgroud)

附录:是朱莉娅去年的一位作者的引用.这个策略有些困难吗?

Julia的大部分都是自己编写的,然后进行解析,类型推断和jitted,因此从头开始整个系统的启动大约需要15-20秒.为了加快速度,我们有一个分阶段系统,我们在文件sys.ji中解析,类型推断,然后缓存类型推断AST的序列化版本.然后加载此文件并在运行julia时用于运行系统.但是,没有LLVM代码或机器代码缓存在sys.ji中,因此每次julia启动时仍需要完成所有LLVM jitting,因此大约需要2秒钟.

这2秒的启动延迟非常烦人,我们有一个修复它的计划.基本计划是能够将整个Julia程序编译为二进制文件:可以运行的可执行文件或.so/.dylib共享库,可以从其他程序调用,就好像它们只是共享的C库一样.二进制文件的启动时间与任何其他C程序一样,因此2秒启动延迟将消失.

python optimization julia

11
推荐指数
2
解决办法
3187
查看次数

javascript中的值类型引用类型对象

javascript对象是基于值还是基于参考?例如:

obj1.list =new array();
// ------ populate list
obj2.list = obj1.list
Run Code Online (Sandbox Code Playgroud)

浏览器是否为obj2.list制作了obj1.list的不同副本,或者obj2.list只是对obj1.list的引用?

javascript

7
推荐指数
2
解决办法
6785
查看次数

python:OpenCV根目录

我正在使用OpenCV用于各种对象检测器,我发现编写可移植代码很困难.

例如,要加载面部检测器,在通过自制软件安装OpenCV的Mac上,我必须写:

haar=cv.Load('/usr/local/Cellar/opencv/2.4.2/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')
Run Code Online (Sandbox Code Playgroud)

这不便携; 如果我想换到另一台机器,我将不得不确定另一个绝对路径并更改此代码.

是否有一个变量来保存OpenCV的OpenCV根目录?这样我就可以这样写:

haar=cv.Load(os.path.join(OpenCVRoot, "haarcascades", 
                          "haarcascade_frontalface_default.xml"))
Run Code Online (Sandbox Code Playgroud)

更新:看起来这对我来说不仅仅是一个问题; 这也是OpenCV文档的一个问题.该文档包含以下破坏的示例代码:

>>> import cv
>>> image = cv.LoadImageM("lena.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
>>> cascade = cv.Load("../../data/haarcascades/haarcascade_frontalface_alt.xml")
>>> print cv.HaarDetectObjects(image, cascade, cv.CreateMemStorage(0), 1.2, 2, 0, (20, 20))
[((217, 203, 169, 169), 24)]
Run Code Online (Sandbox Code Playgroud)

如果有一种方法可以推断出安装lena.jpg和预训练分类器等示例的方法,这将很容易避免.

资料来源:http://opencv.willowgarage.com/documentation/python/objdetect_cascade_classification.html(2013年3月5日检索)

python portability opencv

5
推荐指数
1
解决办法
7072
查看次数

scala - Haskell 序列的模拟

Haskellsequence函数的 scala 模拟是什么? http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:sequence

sequence 在 Haskell 中定义如下:

sequence :: Monad m => [m a] -> m [a]
sequence ms = foldr k (return []) ms
            where
              k m m' = do { x <- m; xs <- m'; return (x:xs) }
Run Code Online (Sandbox Code Playgroud)

以下是一些用途:

ghci> sequence [Just 1, Just 2, Nothing, Just 3]
Nothing
ghci> sequence [[1,2],[3,4],[5,6]]
[[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,3,5],[2,3,6],[2,4,5],[2,4,6]]
Run Code Online (Sandbox Code Playgroud)

提前致谢!

monads haskell scala

5
推荐指数
1
解决办法
739
查看次数