我有短的,可变长度的十进制数字,如:#41551,由人类手动转录.Mistyping one会导致不良结果,所以我首先想到的是使用Luhn算法来添加校验和 - #41551-3.但是,这只会检测错误,而不是纠正错误.似乎添加另一个校验位应该能够检测并纠正一位数的错误,所以给定#41515-3?(换位错误)我将能够恢复正确的错误#41551.
像Hamming代码这样的东西看起来似乎是正确的地方,但我无法弄清楚如何将它们应用于十进制,而不是二进制数据.是否有针对此用途的算法,或汉明/里德 - 所罗门等是否可以适应这种情况?
我有一个ADT代表一个简单语言的AST:
data UTerm = UTrue
| UFalse
| UIf UTerm UTerm UTerm
| UZero
| USucc UTerm
| UIsZero UTerm
Run Code Online (Sandbox Code Playgroud)
这个数据结构可以表示不遵循语言类型规则的无效术语,例如UIsZero UFalse,我想使用强制类型良好的GADT:
{-# LANGUAGE GADTs #-}
data TTerm a where
TTrue :: TTerm Bool
TFalse :: TTerm Bool
TIf :: TTerm Bool -> TTerm a -> TTerm a -> TTerm a
TZero :: TTerm Int
TSucc :: TTerm Int -> TTerm Int
TIsZero :: TTerm Int -> TTerm Bool
Run Code Online (Sandbox Code Playgroud)
我的问题是键入检查UTerm并将其转换为TTerm.我的第一个想法是UTerm -> Maybe (TTerm a),但这当然不起作用,因为它对所有人都无效a.我甚至不知道这种类型是什么,因为我们不知道 …
我正在寻找一个在Django上的OpenID服务器上实现的库.也就是说,我有自己的用户数据库,需要成为我自己的OpenID提供商.我并不需要消耗的OpenID像所有我发现Django的库.有没有好的图书馆?
我发现的一个图书馆是https://bitbucket.org/romke/django_openid_provider/,但它已经有一年未被触及.它状态良好吗?
两阶段提交被称为“原子提交协议”。我希望这意味着所有客户从事务提交之前或提交之后都可以看到世界的状态,而没有中间状态。似乎它可以进入一种状态,其中事务已部分提交,客户看到不一致的数据,从而破坏了原子性。
考虑两个数据库A和B的情况。如果在提交阶段A提交之后但B提交之前存在分区,则事务将部分提交。查询A和B的用户将看不到一致的数据-事务已在A上提交,但B具有来自提交之前的数据。
ACID的“一致”部分似乎也已损坏-查询A和B的客户端可能会看到违反业务规则的数据。
我的想法是,当分区结束并且事务管理器指示B提交时,系统最终将能够从中恢复。但是,与此同时,系统处于不一致的“部分提交”状态。难道不是要防止这种情况的全部原因吗?通过恢复时间一致性,损坏可能已经造成。
当两阶段提交被称为原子时,指的是什么属性?