小编Dan*_*ton的帖子

通过生成素数来使用QuickCheck

背景

为了好玩,我正在尝试编写一个用于快速检查的属性,可以使用RSA测试加密技术背后的基本思想.

  • 选择两个不同的素数,pq.
  • N = p*q
  • e是一些相对素数(p-1)(q-1)(在实践中,e通常是3用于快速编码)
  • d模数e模数(p-1)(q-1)

对于所有x这些,1 < x < N总是如此(x^e)^d = x modulo N

换句话说,x是"消息",将其提升到e功率mod N是"编码"消息的行为,并且将编码消息提升到d功率mod N是"解码"它的行为.

(该属性也非常简单x = 1,一个是自己加密的情况)

以下是我到目前为止编写的方法:

import Test.QuickCheck

-- modular exponentiation
modExp :: Integral a => a -> a -> a -> a
modExp y …
Run Code Online (Sandbox Code Playgroud)

haskell rsa properties generator quickcheck

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

style type ="text/css"......还有什么?

除了"text/css"之外,还有其他类型的浏览器支持样式标记吗?(不包括css的任何同义词).如果没有,那么为什么不呢?

<style type="???"> ... </style>
Run Code Online (Sandbox Code Playgroud)

css browser stylesheet mime-types

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

从集合中选择随机元素,比线性时间快(Haskell)

我想创建这个函数,它从集合中选择一个随机元素:

randElem :: (RandomGen g) => Set a -> g -> (a, g)
Run Code Online (Sandbox Code Playgroud)

可以编写简单的列表实现.例如(代码更新,验证工作):

import Data.Set as Set
import System.Random (getStdGen, randomR, RandomGen)

randElem :: (RandomGen g) => Set a -> g -> (a, g)
randElem s g = (Set.toList s !! n, g')
    where (n, g') = randomR (0, Set.size s - 1) g

-- simple test drive
main = do g <- getStdGen
          print . fst $ randElem s g
    where s = Set.fromList [1,3,5,7,9]
Run Code Online (Sandbox Code Playgroud)

但是使用 …

random performance haskell set

13
推荐指数
3
解决办法
2311
查看次数

Leksah是否有hlint,hoogle集成?

leksah是否支持任何类型的插件?会吗?它是否内置了任何插件,如hlint,hoogle,pl,djinn?如果没有,是否有一种简单的方法来整合这些东西?

plugins haskell leksah hlint

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

为什么没有部分函数类型的文字?

我想知道为什么不存在部分函数类型的文字.我得写

val pf: PartialFunction[Int, String] = {
  case 5 => "five"
}
Run Code Online (Sandbox Code Playgroud)

字面意思:=>较短的地方:

val pf: Int :=> String = {
  case 5 => "five"
}
Run Code Online (Sandbox Code Playgroud)

部分函数经常被使用并且在Scala中已经有了一些"特殊"功能,为什么没有特殊的语法呢?

scala built-in-types

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

如何实现Haskell中的库函数

我刚刚开始学习Haskell,并且会发现查看Haskell函数是如何实现的非常有用.我已经能够在不同的问题上找到标准前奏曲,但我现在对Data.List感兴趣.有没有办法找到这些功能的来源?

我真的很想看到排列和结点(其余的,但这些对我来说最有趣).

implementation haskell standard-library

12
推荐指数
2
解决办法
2428
查看次数

可以在恢复和掩码之间潜行异常吗?

假设我有一些像这样编写的代码:

import Control.Exception (bracketOnError, finally, mask)
import Client (acquireB, releaseB, doStuff) -- theoretical
import MyStuff (preliminary, doMoreStuff) -- theoretical

clientAction = bracketOnError acquireB releaseB $ \b ->
  doStuff b
  return (b, releaseB b)

myAction = mask $ \restore ->
  a <- preliminary
  (thing, releaseThing) <- restore clientAction
  doMoreStuff a thing `finally` releaseThing
Run Code Online (Sandbox Code Playgroud)

我必须做一些preliminary事情,我的客户获得b然后必须doStuffb,然后我必须doMoreStuffb.并且b需要释放,即使发生异步异常.但我不知道如何发布b,所以我的客户告诉我如何.以这种方式编写,b如果在"我们的"代码中发生异常,我们都准备发布.

我的问题是:异步异常是否有可能导致releaseB不执行?具体来说,"我的代码"和"我的客户端代码"之间是否存在间隙,异步异常可以挤入其中?让我内联clientActionbracketOnException解释.

myAction = …
Run Code Online (Sandbox Code Playgroud)

resources haskell asynchronous exception

12
推荐指数
1
解决办法
472
查看次数

在Haskell中表达长链组合

(不重要的背景信息/动机)

我正在实施一个不同的版本nub,受到Yesod书的劝阻使用它的启发.

map head . group . sort比打电话更有效率nub.但是,在我们的案例中,订单很重要......

所以我开始写一个类似于订单不重要版本的"更好"的小块.我最终得到了这个:

mynub = unsort . map head . groupBy (\x y -> fst x == fst y) . sortBy (comparing fst) . rememberPosition

rememberPosition = flip zip [0..]
unsort = map fst . sortBy (comparing snd)
Run Code Online (Sandbox Code Playgroud)

这肯定会做很多额外的工作,但它应该是O(n log n)而不是原始nub的O(n 2).但这不是重点.问题是,它太长了!它真的不是那么复杂,但它很长(而且我是那些讨厌超过80列的人,或StackOverflow代码块上的水平滚动条).

(问题)

在Haskell中表达长链函数组合的更好方法是什么?

haskell coding-style function-composition

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

这是`try..catch..finally`多余的?

public Foo doDangerousStuff() throws Exception {
    try {
        dangerousMethod();
        return new Foo();
    } catch (Exception e) {
        throw e;
    } finally {
        mustBeCalledAfterDangerousMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

这与我们省略catch子句的行为有什么不同吗?

public Foo doDangerousStuff() throws Exception {
    try {
        dangerousMethod();
        return new Foo();
    } finally {
        mustBeCalledAfterDangerousMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

[编辑]为了清除混淆,是的,catch除了重新抛出异常之外,该块不执行任何操作.我想知道这是否会在finally调用块时引起某种不同的排序(假设调用者捕获了抛出的异常),但是从我从答案推断出来的情况来看,它并没有.

java exception-handling try-catch-finally control-flow

11
推荐指数
3
解决办法
608
查看次数

在Haskell中将一个IO字符串写入stdout

我们如何打印一个返回一个IO字符串的函数的输出到stdout?我无法使用节目或印刷品.

io haskell stdout

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