西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)C#.NET → 現(xiàn)實(shí)的世界和虛擬的計(jì)算機(jī)

現(xiàn)實(shí)的世界和虛擬的計(jì)算機(jī)

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:本站整理時(shí)間:2010/8/22 14:49:58字體大。A-A+

作者:不詳點(diǎn)擊:400次評(píng)論:0次標(biāo)簽: Stack C# Stream

7stacks(stacks效果工具)1.5 beta2官方版
  • 類型:系統(tǒng)其它大。2.7M語(yǔ)言:中文 評(píng)分:5.0
  • 標(biāo)簽:
立即下載

人們常常看著照片回憶起從前,清晰地感覺(jué)到童年,青年,中年,老年一路走來(lái)的各種變化。從這種變化中,我們可以抽象出3個(gè)關(guān)鍵詞:對(duì)象、時(shí)間和狀態(tài)。對(duì)象擁有狀態(tài)和標(biāo)識(shí),在標(biāo)識(shí)不變的情況下,狀態(tài)隨時(shí)間發(fā)展演變。這實(shí)際上代表了一種動(dòng)態(tài)的世界觀:時(shí)間本身并不屬于世界,世界是在時(shí)間維度上不斷演變的狀態(tài)。在這種世界觀的指導(dǎo)下,通過(guò)計(jì)算機(jī)程序模擬現(xiàn)實(shí)世界問(wèn)題時(shí),我們用計(jì)算機(jī)中的對(duì)象狀態(tài)表示世界的狀態(tài),用計(jì)算機(jī)中對(duì)象的狀態(tài)的變化表示世界狀態(tài)的變化和時(shí)間進(jìn)程。

 與上面動(dòng)態(tài)的世界觀不同,另一種世界觀認(rèn)為世界本質(zhì)上是靜止的。怎么理解呢?比如:對(duì)于一個(gè)歷史人物,在他生活的每一天里都有變化,從這個(gè)角度看是狀態(tài)的變化;但是如果縱觀他的一生,其人生軌跡作為一個(gè)整體又是靜止的,我們可以把這個(gè)整體作為一個(gè)研究的對(duì)象。這里,我們實(shí)際上把時(shí)間維度也納入對(duì)象屬性,使在3維中運(yùn)動(dòng)的對(duì)象變成了在4維中靜止的對(duì)象。物理學(xué)上稱對(duì)象在4維空間中的軌跡為對(duì)象的世界線(World Line)。另外,即使不是已經(jīng)蓋棺定論的對(duì)象,假如對(duì)象是有規(guī)律的,比如:一個(gè)物體的運(yùn)動(dòng)狀態(tài)由某一個(gè)公式完全決定,即未來(lái)某一時(shí)刻它處于什么位置也是完全確定的,那么我們只要掌握了這個(gè)公式就掌握了物體的世界線。

我們把對(duì)象的世界線用x(t)來(lái)表示,如果時(shí)間是離散的,我們可以用一個(gè)序列(Sequence)來(lái)表示x(t)。與計(jì)算的對(duì)象模型通過(guò)狀態(tài)改變來(lái)隱式地表示時(shí)間不同,我們可以把計(jì)算認(rèn)為是輸入序列input(t)到輸出序列output(t)的變換,時(shí)間是通過(guò)離散序列的方式顯式表示的。我們的程序?qū)嶋H上扮演了一個(gè)信號(hào)處理器的角色。

但有限序列的缺點(diǎn)在于它要求輸入是完整的,因而無(wú)法處理交互的情況,比如:我們把用戶的鍵盤(pán)輸入input(t)無(wú)法用一個(gè)有限序列來(lái)表示。為了處理交互,我們引入了可用惰性求值的流(Stream)。流可用視為可用惰性求值的無(wú)窮序列,這樣我們的程序就是一個(gè)信號(hào)處理器,輸入時(shí)一個(gè)流,輸出也是一個(gè)流。為了幫助理解,下面我們用一個(gè)C#實(shí)現(xiàn)的Stack的例子來(lái)說(shuō)明:

//C#實(shí)現(xiàn)的基于流的Stack

public enum OperationType { PUSH, POP}

public struct Input{
    public OperationType Operation;
    public int Data;
}

class Stack
{
    public static IEnumerable<int> Transform(IEnumerable<Input> aSourceStream)
    {
        LinkedList<int> list = new LinkedList<int>();
        foreach(Input command in aSourceStream)
        {
             if(OperationType.PUSH== command.Operation)
             {
                  list.AddLast(command.Data);
             }
             else if (OperationType.POP == command.Operation)
             {
                  int data = list.Last.Value;
                  list.RemoveLast();
                  yield return data;
             }
        }
    }
}

public class InputGenerator
{
    public static IEnumerable<Input> Generate()
    {
        while (true)
        {
            string line = Console.ReadLine();
            if (line.StartsWith("push "))
            {
                yield return new Input { Operation = OperationType.PUSH, Data = int.Parse(line.Split(' ')[1]) };
            }
            else if (line == "pop")
            {
                yield return new Input { Operation = OperationType.POP };
            }
        }
    }
}

public static void Main(string[] args)
{
    foreach (int output in Stack.Transform(InputGenerator.Generate()))
    {
        Console.WriteLine(output);
    }
}

運(yùn)行示例:

>>push 1

>>push 2

>>pop

2

>>push 3

>>pop

3

上面的例子中用戶的輸入被包裝成無(wú)窮的Input輸入流,Stack是從Input輸入流到int輸出流的信號(hào)處理器。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門評(píng)論

    第 1 樓 浙江寧波寧波大紅鷹學(xué)院 網(wǎng)友 客人 發(fā)表于: 2010/12/28 16:55:29
    零碎的看了一點(diǎn),在講關(guān)于時(shí)間的科幻話題嗎?

    支持( 0 ) 蓋樓(回復(fù))

    最新評(píng)論

    第 1 樓 浙江寧波寧波大紅鷹學(xué)院 網(wǎng)友 客人 發(fā)表于: 2010/12/28 16:55:29
    零碎的看了一點(diǎn),在講關(guān)于時(shí)間的科幻話題嗎?

    支持( 0 ) 蓋樓(回復(fù))

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)