计算机程序的结构和解释一书介绍了一个记忆过程如下:
(define (memo-proc proc)
(let ((already-run? false) (result false))
(lambda ()
(if (not already-run?)
(begin (set! result (proc))
(set! already-run? true)
result)
result))))
Run Code Online (Sandbox Code Playgroud)
在提出延迟执行的定义的同时,(delay <exp>)是(memo-proc (lambda () <exp>))。可以使用以下过程强制延迟对象:
(define (force delayed-object)
(delayed-object))
Run Code Online (Sandbox Code Playgroud)
在给出这些定义的章节中,计算是使用流完成的。每个流都是一对,有一个头部和一个延迟尾部。
但是,我不知道如何在不使用查找表或其他累积先前调用的数据结构的情况下实现记忆化。
包括这些定义的章节在这里。
当我们用各种参数记住单个过程时,查找表会很有用。然后,我们将参数作为键,将过程的结果作为值。在这种情况下,我们有空过程,因此我们不需要查找表。我们所需要的只是我们迄今为止创建的一组延迟对象。但是,这里使用了闭包。
根据memo-proc上面的定义,每个延迟对象实际上是一个带有值already-run?和的闭包result,它们都初始化为false。但是,由于调用中的每个延迟对象proc都有自己的闭包和自己的本地already-run?和result,因此修改它们不会更改调用树中的其他对象。因此,我觉得任何其他程序都不会再读取记忆值。
所以我的问题是,我在想什么,或者对一切如何运作的正确解释是什么?
我有这个javascript:
triggerAnimation(listItem,toggleToggleRadioListItem(listItem));
function triggerAnimation(listItem,passThruFunction){
listItem.find(".inlineLoading").show();
// pause and then call the toggle function
$("body").animate({opacity: 1}, 1000,
function(){
alert("a");
passThruFunction;
}
);
}
function toggleToggleRadioListItem(listItem) {
alert("b");
};
Run Code Online (Sandbox Code Playgroud)
应该发生什么:
基于以上所述,我希望警报A出现在警报B之前,但事实并非如此.发生的事情是(看起来)一旦调用triggerAnimation()就会调用警报B. 这是为什么?我怎样才能实现这种行为?
鉴于延迟执行,我试图了解并行性如何使用 PLINQ 工作。这是一个简单的例子。
string[] words = { "believe", "receipt", "relief", "field" };
bool result = words.AsParallel().Any(w => w.Contains("ei"));
Run Code Online (Sandbox Code Playgroud)
使用 LINQ,我希望执行达到“收据”值并返回 true,而不执行其余值的查询。
如果我们并行执行此操作,则“relief”的评估可能在“receipt”的结果返回之前就已开始。但是一旦查询知道“receipt”会导致一个真实的结果,其他线程是否会立即yield?
就我而言,这很重要,因为“任何”测试可能非常昂贵,而且我希望释放处理器以执行其他任务。
我在尝试使用LINQ to SQL查询和映射到我的域对象DRY时遇到问题,而不会产生多次往返db的成本.鉴于这个例子:
var query1 = from x in db.DBProducts
select new MyProduct
{
Id = x.ProductId,
Name = x.ProductName,
Details = new MyProductDetail
{
Id = x.DBProductDetail.ProductDetailId,
Description = x.DBProductDetail.ProductDetailDescription
}
}
Run Code Online (Sandbox Code Playgroud)
该查询将对DB进行一次往返.大!但是,我看到的问题是,最终,我还将有一个'GetProductDetails'方法,它还需要做一些SAME"数据对象 - >域对象"映射,与上面非常类似.
为了减轻一些映射,我认为扩展部分数据对象类为我做映射可能是一个很酷的主意,如下所示:
public partial class DBProduct
{
MyProduct ToDomainObject()
{
return new MyProduct
{
Id = this.ProductId,
Name = this.ProductName,
Details = this.DBProductDetails.ToDomainObject()
};
}
}
public partial class DBProductDetail
{
MyProductDetail ToDomainObject()
{
return new MyProductDetail
{
Id = this.ProductDetailId,
Description = this.ProductDetailDescription
}; …Run Code Online (Sandbox Code Playgroud) 我必须从C#程序中将几百个单元格输入到Excel表格中.每次我设置一个单元格或一个范围时,excel会慢慢响应...可能会在我添加的每个输入之间更新各种输出.有没有办法从我的C#程序中禁用计算,并在完成设置单元格并准备读取输出后重新启用它?
所以,我最近从Mathematica转换为Matlab,虽然Matlab具有Mathematica的大部分有用功能,但我无法弄清楚如何执行相当于Mathematica的延迟设置操作':=',它将变量赋值给a懒散的时尚.
例如,在Mathematica中:
y = 2;
x:= y;
y = 3;
X
将x的值赋予3,而我在Matlab中获得相同行为的唯一方法是:
y = 2;
x = @()(y);
y = 3;
X()
虽然在技术上回答了我的问题,但它是一个非常特别的工作,需要将x作为一个函数来处理.
那么有更自然的方法来做到这一点是Matlab吗?
编辑:
我的ad-hoc解决方案仅在y是句柄类的字段时才起作用,为了清楚起见,我把它留在了代码之外(它应该是someclass.y).我的问题的答案最好不会有这个限制,但如果确实如此,我仍然会接受.
matlab wolfram-mathematica lazy-evaluation delayed-execution
我希望在后台使用jQuery作为"心跳"进行AJAX调用,以便我的Web应用程序可以检查新数据.例如每10秒钟.
我在其他帖子上看到,可以使用它来setInterval()调用每隔X毫秒执行调用的方法.
但是,如果我的AJAX调用超过10秒钟会发生什么?我仍然希望它完成最后一个请求,并且我不希望在已经有一个正在进行的情况下发起另一个呼叫.这可能导致相同的信息被放置到页面两次!
实现此方法的方法是什么,等待原始AJAX调用完成,而不是简单地"每10秒",原始的AJAX调用可能尚未完成.
我有一个风暴拓扑来处理来自 Kafka 的消息,并根据手头的任务在 Cassandra 中进行 HTTP 调用/保存。我一收到消息就处理。由于响应来自外部源(如 HTTP),很少有消息没有被完全处理。我想为重试实现指数退避机制,以防 HTTP 服务器在一段时间后不响应/返回错误消息以重试。我可以想到一些可以实现它们的想法。如果我可以使用任何其他容错解决方案,我想知道其中哪一个是更好的解决方案。由于这用于实现指数退避,因此每条消息将具有不同的延迟时间。
虽然这几乎是我想做的。我无法找到文档来实现Kafka - Delayed Queue implementation using high level consumer 中提到的delayProcessingUntil
我过去曾使用 Beanstalk 从 Data-store 完成预定工作并延迟,但我更喜欢使用 Kafka。
java message-queue delayed-execution apache-kafka apache-storm
我知道debounce在Undercore.js中会返回一个函数,该函数将推迟执行直到等待时间结束.
我的问题是,使用vanilla Javascript中debounce的常规setTimeout函数是否有优势?他们俩都不一样吗?
javascript settimeout delayed-execution underscore.js lodash
我有一个搜索栏,其中包含一些建议UITableView,这些建议会在用户输入时填充(使用JSON服务).这些服务调用需要在延迟500ms的非打字后进行.如果用户开始输入500ms的这段时间,则需要取消队列中的当前呼叫,并且应用程序必须等待另外500ms的非活动才能再次afterDelay呼叫.我知道我必须performSelector:withObject:afterDelay在整个情况下使用,但我无法适应条件.我尝试使用一堆bool但它只是变脏......任何帮助?
c# ×3
jquery ×2
ajax ×1
apache-kafka ×1
apache-storm ×1
asp.net-mvc ×1
com-interop ×1
excel ×1
heartbeat ×1
ios ×1
ipad ×1
iphone ×1
java ×1
javascript ×1
linq-to-sql ×1
lodash ×1
matlab ×1
memoization ×1
plinq ×1
scheme ×1
settimeout ×1
sicp ×1
sql-server ×1
stream ×1
yield ×1