2009年4月16日星期四

Lose Count 数不清


我用针尖计算着与你见面的日子,一次又一次的麻木与苏醒,不断忘了数目又从零开始。
一夜中睡了三次,起来三次,我不知道该怎么计算。
这些混乱的日子,无休无止,我数不清。


Do we really need to count?

有时候简单的数几个数也总是数不对,计算机如此擅长此事,而我们却没有给以足够的信赖。
TCountState = class
  private
    Xes: TList;
    FXCount: Integer;
  public
    procedure AddX(X: XClass);
    procedure Reset;
  property XCount: Integer read FXCount;
end;

TCountState.AddX(X: XClass);
begin
  if not Xes.Has(X) then
  begin
    Xes.Add(X);
    Inc(XCount);
  end;
end;

TCountState.Reset;
begin
  XCount := 0;
  // However, nothing be done with Xes here.
end;

毫无疑问,在这千头万绪的岁月中,AddX()会在不同的线程中调用,即使算上脚指头,我们也无法数清楚XCount到底是什么了。好歹我们知道有个东西叫InterLockIncrement
很好,似乎学会数数了,但是,看起来有时候还是会数错,尤其是在一次次的麻木与苏醒之后,也许想忘记过去,却不够彻底,忘了一些东西而记住了另一些东西,这会混乱不堪。所以,在醒来之前把过去消除掉吧,它可能是美好的回忆,但也可能是沉重的包袱,或者兼而有之。
Xes.Clear;这一次,可以坚信不用手指头也可以正确数数了。

等等,我们真的需要数吗?
这些混乱的日子,无休无止,是度日如年、一日三秋还是十年一梦,谁也数不清,只有日历最清楚。
还是直接问问它们吧。
TCountState = class
  private
    Xes: TList;
    function GetXCount: Integer;
  public
    procedure AddX(X: XClass);
    procedure Reset;
  property XCount: Integer read GetXCount;
end;

TCountState.AddX(X: XClass);
begin
  if not Xes.Has(X) then
  begin
    Xes.Add(X);
  end;
end;

TCountState.GetXCount;
begin
  Result := Xes.Count;
end;

TCountState.Reset;
begin
  Xes.Clear;
end;

数数真的很难,曾经QQ空间这样跟我说
共 126 个签名,第 22 页/共 21 页
曾经我们在邮件列表中这样计算
K = 12
AVE = 23.45


k=13
average=23.57

k=13
AVG=23.49

出现了互斥问题,修正一下当前k=14,ave=23.60

没有评论: