以为我会尝试在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) 显然,((.).(.))运营商的通用名称是(.:).在哪里(.:)定义?或者我必须自己定义?
假设我有一个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)
这会导致重复的目标代码爆炸,唯一的区别是常量N和M使用,特别是如果我使用这个copy方法与有很多不同的对象N和M?
由于方法本身根本不依赖M,是否有另一种方法来解决这个问题,以避免重复的目标代码爆炸?
我在Haskell Emacs页面上看到haskell-mode中有许多可用的键绑定.我下载了Emacs 24.1并加载了一个Haskell文件,但绑定不起作用.例如,C-c C-=应该插入一个=和排队类型的签名,但Emacs给了我一个C-c C-= is undefined.
如何启用这些键绑定?
我有很多Word8值,我加在一起.因为这可能导致溢出,结果需要是a Word16.
是否有更好的方法将所有这些值添加到一起,而不是以下:
fromIntegral a + fromIntegral b + fromIntegral c + fromIntegral d + ...
Run Code Online (Sandbox Code Playgroud)
哪个杂乱的代码没有真正添加任何清晰度?
这似乎很长,但最近我需要以下内容:
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和附加值.
是否有这个或更简单的配方的标准功能,也许有>>=?
我在这里关注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) 我想找出在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)
但也不读.是否有更清洁的方式来表达同样的事情?
我有时间序列数据,我想存储在格式的数据库中:
这个数据库几乎都是读取数据库.搜索将针对属于日期范围内的组的行(例如,组= XXX,日期> = START,日期<= END).
数据集很大.数亿行.SQLite能否轻松处理这类数据?关于SQLite的吸引人之处在于它是无服务器的,如果可以,我想使用它.