当我似乎理解Haskell的回归时,我尝试使用不同的替代方案,似乎返回不仅可以在monad链中的任何地方使用,而且可以完全排除
*Main> Just 9 >>= \y -> (Just y) >>= \x -> return x
Just 9
*Main> Just 9 >>= \y -> (return y) >>= \x -> (Just y)
Just 9
*Main> Just 9 >>= \y -> (Just y) >>= \x -> (Just x)
Just 9
Run Code Online (Sandbox Code Playgroud)
即使我在自己的实例中省略了返回,我也只会收到警告......
data MaybeG a = NothingG | JustG a deriving Show
instance Monad MaybeG where
-- return x = JustG x
NothingG >>= f = NothingG
JustG x >>= f = f x
fail …Run Code Online (Sandbox Code Playgroud) 我使用XPather使用不同的XPath查询(仅适用于较旧的firefox版本)并注意以下查询的结果之间的差异
这个显示了一些结果
//div[descendant::table/descendant::td[4]]
Run Code Online (Sandbox Code Playgroud)
这个列出了空列表
//div[//table//td[4]]
Run Code Online (Sandbox Code Playgroud)
它们是否因某些规则而不同,或者只是XPath解释器的特定实现的不当行为?(看起来像从FF引擎中使用,XPather只是一个非常简单的查询GUI)
当我使用 Wikipedia API 执行全文搜索时,我无法将搜索范围缩小到仅标题 (srwhat=title)。
所以在任何地方搜索(默认) http://en.wikipedia.org/w/api.php?action=query&list=search&srsearch=sql&srnamespace=14&format=xml
返回结果,如果我添加 srwhat=title,则会出现错误:
<api servedby="mw69">
<error code="srsearch-title-disabled" info="title search is disabled"/>
</api>
Run Code Online (Sandbox Code Playgroud)
这个错误甚至列在文档中(http://www.mediawiki.org/wiki/API:Search),但没有任何解释。
我正在构建基于AES的文件加密,必须能够以随机访问模式工作(访问文件的任何部分).例如,可以使用计数器中的AES,但众所周知,我们需要一个从未使用过两次的唯一序列.在这种情况下是否可以使用简化的Fortuna PRNG(使用随机选择的特定文件特有的密钥加密计数器)?这种方法有弱点吗?
因此加密/解密可能如下所示
在Offset处加密块:
rndsubseq = AESEnc(Offset, FileUniqueKey)
xoredplaintext = plaintext xor rndsubseq
ciphertext = AESEnc(xoredplaintext, PasswordBasedKey)
Run Code Online (Sandbox Code Playgroud)
在Offset处解冻块:
rndsubseq = AESEnc(Offset, FileUniqueKey)
xoredplaintext = AESDec(ciphertext, PasswordBasedKey)
plaintext = xoredplaintext xor rndsubseq
Run Code Online (Sandbox Code Playgroud)
一个观察.我自己来到Fortuna使用的想法,后来肯定发现它已经被发明了.但只要我阅读无处不在关键的一点它是安全的,但有另一个好一点:这是一个伟大的随机存取伪随机数生成器可以这么说(以简化形式).所以PRNG不仅产生非常好的序列(我用Ent和Die Hard测试它),而且如果你知道步骤号,也允许访问任何子序列.那么在安全应用程序中使用Fortuna作为"随机访问"PRNG通常是否可以?
编辑:
换句话说,我建议使用Fortuna PRNG作为调整,以形成具有随机访问能力的可调整AES密码.我读了Liskov,Rivest和Wagner的作品,但无法理解操作模式中的密码与可调整密码之间的主要区别.他们说,他们建议把从密码自身内部高层这种方法,但是例如在我的情况下,异或纯文本与TWEAK,这是一个好办法没有?
我们正在使用 joomla 模板,其中创建者在constant.css 中定义了规则
table
{
border-collapse:collapse;
border:0px;
width:100%;
}
Run Code Online (Sandbox Code Playgroud)
当我需要我自己的带有自定义参数(宽度、边框等)的表格时,一场噩梦就开始了。如果我使用通用 html 参数,它们将不起作用,因为 css 规则更重要(CMIIW)。如果我使用 style= param,我想我无法控制表格在 IE 中的查找方式(最多 7 个)。
那么是否有一个通用的方法来解决这个问题,或者我只需要评论该规则(就像我已经做的那样)。
另外,如果我说 joomla 模板的创建者不应该默认定义像 width:100% 这样的一般规则,我对吗?我的意思是,如果他们不希望他们的模板的用户抱怨。
我必须做一些记录子数据大小计算,所以创建了类似的东西
function GetSubDataSize(const Rec: TRecord): integer;
begin
Result:=integer(@Rec.Field2) - integer(@Rec.Field1);
end;
Run Code Online (Sandbox Code Playgroud)
除了一种情况,如果Field中的一个是一个过程或函数指针,那么一切都很好,所以如果是
TRecord = record
Field2: procedure(Sender: TObject) of object;
end;
Run Code Online (Sandbox Code Playgroud)
该函数获取过程本身的地址.有没有办法对字段进行类型转换以获取字段的地址而不是函数的地址?我知道我可以使用变体部分记录来解决它,但只是不想使用它.
谢谢,
马克斯
最新版本的Sqlite(3.7.10)想要链接__msize函数,既然Delphi内存管理器无法报告内存块的大小,我不得不介绍一个hack(d5兼容)
function __msize(p: pointer): Cardinal;cdecl;
begin
Result:=PInteger(integer(p)-4)^-6;
end;
Run Code Online (Sandbox Code Playgroud)
Sqlite(定义?)或Delphi中是否有其他解决方案可以修复此问题,因此不会使用任何未记录的功能.
我发现Delphi 5在特定情况下会生成无效的汇编代码.一般来说,我无法理解在什么情况下.以下示例产生访问冲突,因为发生了非常奇怪的优化.对于记录或数组中的一个字节,Delphi生成push dword [...],pop ebx,mov ..,bl如果在此字节后面有数据(我们至少需要三个正确推送dword)才能正常工作,但是失败了如果数据不可访问.我在这里使用win32 Virtual*函数模拟了严格的界限
具体而言,当在FeedBytesToClass过程中访问块的最后一个字节时,会发生错误.如果我尝试更改类似于使用数据数组而不是删除actionFlag变量的对象属性,Delphi会生成正确的汇编指令.
const
BlockSize = 4096;
type
TSomeClass = class
private
fBytes: PByteArray;
public
property Bytes: PByteArray read fBytes;
constructor Create;
destructor Destroy;override;
end;
constructor TSomeClass.Create;
begin
inherited Create;
GetMem(fBytes, BlockSize);
end;
destructor TSomeClass.Destroy;
begin
FreeMem(fBytes);
inherited;
end;
procedure FeedBytesToClass(SrcDataBytes: PByteArray; Count: integer);
var
j: integer;
Ofs: integer;
actionFlag: boolean;
AClass: TSomeClass;
begin
AClass:=TSomeClass.Create;
try
actionFlag:=true;
for j:=0 to Count-1 do
begin
Ofs:=j;
if actionFlag then
begin
AClass.Bytes[Ofs]:=SrcDataBytes[j];
end;
end;
finally
AClass.Free;
end;
end; …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何使用前缀表示法重写monadic计算(不是为了实际目标,仅用于研究),而是一个lambda看不到另一个参数的问题
给一个工作的例子
*Main> [1, 3, 4] >>= \x -> [x + 1, x - 1] >>= \y -> return (y*x)
[2,0,12,6,20,12]
Run Code Online (Sandbox Code Playgroud)
重写的那个显示错误没有看到其他lambda的参数
*Main> (>>=) ( (>>=) [1, 3, 4] (\x -> [x + 1, x - 1]) ) (\y -> return (y*x))
<interactive>:133:68: Not in scope: `x'
Run Code Online (Sandbox Code Playgroud)
但如果我让最后一个不使用它(通过用y代替x),计算就开始工作了
*Main> (>>=) ( (>>=) [1, 3, 4] (\x -> [x + 1, x - 1]) ) (\y -> return (y*y))
[4,0,16,4,25,9]
Run Code Online (Sandbox Code Playgroud)
那么技术上可能在前缀表示法中完全重写吗?或者访问其他lambdas参数的这个属性是中缀表示法独有的?
我希望我的扫描磁盘结构的软件能够在后台运行,但是会降低扫描磁盘结构的线程的优先级.我的意思是,即使您的程序仅消耗1%的处理器时间,您仍然感觉计算机难以工作甚至冻结.是否有可能在Win32中实现相当于CPU消耗的"硬盘时间消耗"