小编Ana*_*Ana的帖子

Haskell中的SHA1 - 我的实现有问题

以为我会尝试在Haskell中实现SHA1.我想出了一个实现,它编译并返回空字符串("")的正确答案,但没有别的.我无法弄清楚可能出现的问题.熟悉算法的人和SHA1能指出来吗?

import Data.Bits
import Data.Int
import Data.List
import Data.Word
import Text.Printf
import qualified Data.ByteString.Lazy as L
import qualified Data.ByteString.Lazy.Char8 as C

h0 = 0x67452301 :: Word32
h1 = 0xEFCDAB89 :: Word32
h2 = 0x98BADCFE :: Word32
h3 = 0x10325476 :: Word32
h4 = 0xC3D2E1F0 :: Word32

sha1string :: String -> String
sha1string s = concat $ map (printf "%02x") $ sha1 . C.pack $ s 

sha1 :: L.ByteString -> [Word8]
sha1 msg = concat [w32ToComps a, w32ToComps b, …
Run Code Online (Sandbox Code Playgroud)

haskell sha1

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

Haskell(.:)运算符在哪里定义?

显然,((.).(.))运营商的通用名称是(.:).在哪里(.:)定义?或者我必须自己定义?

haskell operators

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

避免采用int参数的模板类的C++爆炸性实例化

假设我有一个C++类:

template<int N>
class Text {
    public:
        Text() { }
        char _buf[N];
};
Run Code Online (Sandbox Code Playgroud)

它只是封装了一个C字符串.

现在,假设我编写了一个方法,它将获取另一个Text具有长度的对象,M并将其内容复制到此对象中.

template<int N>
class Text {
    public:
        Text() { }
        char _buf[N];

        template<int M> void copy(const Text<M> &t) {
            strncpy(_buf, t.cstr(), N - 1);
            _buf[N - 1] = '\0';
        }            
};
Run Code Online (Sandbox Code Playgroud)

这会导致重复的目标代码爆炸,唯一的区别是常量NM使用,特别是如果我使用这个copy方法与有很多不同的对象NM

由于方法本身根本不依赖M,是否有另一种方法来解决这个问题,以避免重复的目标代码爆炸?

c++ templates

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

Emacs 24.1和haskell模式键绑定

我在Haskell Emacs页面上看到haskell-mode中有许多可用的键绑定.我下载了Emacs 24.1并加载了一个Haskell文件,但绑定不起作用.例如,C-c C-=应该插入一个=和排队类型的签名,但Emacs给了我一个C-c C-= is undefined.

如何启用这些键绑定?

emacs haskell

4
推荐指数
1
解决办法
826
查看次数

添加时,Haskell重复使用fromIntegral

我有很多Word8值,我加在一起.因为这可能导致溢出,结果需要是a Word16.

是否有更好的方法将所有这些值添加到一起,而不是以下:

fromIntegral a + fromIntegral b + fromIntegral c + fromIntegral d + ...
Run Code Online (Sandbox Code Playgroud)

哪个杂乱的代码没有真正添加任何清晰度?

haskell type-conversion

4
推荐指数
1
解决办法
145
查看次数

Haskell标准函数(或简单组合)用于"mjoin"?

这似乎很长,但最近我需要以下内容:

mjoin :: (Monoid b, Monad m) => m b -> m b -> m b
mjoin a b = do
  a' <- a
  b' <- b
  return $ mappend a' b'
Run Code Online (Sandbox Code Playgroud)

示例用法是这样的:

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

换句话说,如果任一参数Nothing,则返回Nothing.否则,返回Just和附加值.

是否有这个或更简单的配方的标准功能,也许有>>=

haskell

4
推荐指数
1
解决办法
61
查看次数

在这个例子中,我的Haskell定义了绑定运算符有什么问题?

我在这里关注monad变形金刚教程.

在本教程的这一点上,它要求我尝试为EitherIO数据类型实现Monad实例,定义如下:

data EitherIO e a = EitherIO {
    runEitherIO :: IO (Either e a)
}
Run Code Online (Sandbox Code Playgroud)

所以我尝试过:

instance Functor (EitherIO e) where
  fmap f = EitherIO . fmap (fmap f) . runEitherIO

instance Monad (EitherIO e) where
  return  = EitherIO . return . Right
  x >>= f = join $ fmap f x
Run Code Online (Sandbox Code Playgroud)

该教程的版本有点不同:

instance Monad (EitherIO e) where
  return  = pure -- the same as EitherIO . return . Right
  x >>= f = …
Run Code Online (Sandbox Code Playgroud)

monads haskell ghc ghci

4
推荐指数
2
解决办法
163
查看次数

是否有用于文本的 Haskell readMaybe 函数?

问题说明了一切:有readMaybeforText吗?我似乎找不到一个包来实现它。

text haskell

4
推荐指数
1
解决办法
509
查看次数

Idiomatic Lisp创建排序随机数列表的方法?

我想找出在Common Lisp中创建随机数排序列表的常用方法是什么.在Clojure中它很简单:

(sort (take 10 (repeatedly #(rand 10))))
Run Code Online (Sandbox Code Playgroud)

我发现在CL中有以下作用:

(sort (loop for n below 10 collect (random 10)) #'<)
Run Code Online (Sandbox Code Playgroud)

但也不读.是否有更清洁的方式来表达同样的事情?

idiomatic common-lisp

4
推荐指数
1
解决办法
196
查看次数

适用于大型时间序列数据的SQLite的适用性/性能

我有时间序列数据,我想存储在格式的数据库中:

  • group:string
  • 日期:日期
  • val1:数字
  • val2:数字
  • ... valN

这个数据库几乎都是读取数据库.搜索将针对属于日期范围内的组的行(例如,组= XXX,日期> = START,日期<= END).

数据集很大.数亿行.SQLite能否轻松处理这类数据?关于SQLite的吸引人之处在于它是无服务器的,如果可以,我想使用它.

sqlite performance

4
推荐指数
1
解决办法
5221
查看次数