計算機(jī)函數(shù)和數(shù)學(xué)函數(shù)都是
不管是計算機(jī)函數(shù),還是數(shù)學(xué)函數(shù),它們都符合函數(shù)的這個抽象定義。
函數(shù)的要素
輸入 輸出 單向有序?qū)?yīng)(輸入對應(yīng)到輸出)
換一種你可能覺得匪夷所思的方式來描述函數(shù),可以這么來講:
函數(shù)實際上是一個
從形式上講,函數(shù)圖和函數(shù)是相同的東西,但函數(shù)圖隱藏了函數(shù)作為某種
y=f(x)這種表示法就代表了x通過一個函數(shù)的過程f,映射(或者輸出)y的全部含義。
此外,函數(shù)也稱為
函數(shù)的基本定義是數(shù)學(xué)的函數(shù)和計算機(jī)函數(shù)通用的,否則就不叫函數(shù)。下面我們分開看下數(shù)學(xué)函數(shù)和計算機(jī)函數(shù)的異同。
數(shù)學(xué)的函數(shù)
函數(shù)最早就是在數(shù)學(xué)領(lǐng)域定義的,因此數(shù)學(xué)的函數(shù)的定義基本上與上面講的函數(shù)的基本定義類似,但是數(shù)學(xué)的函數(shù)限定函數(shù)的輸入和輸出對象必須是數(shù),而不是其它什么貓貓狗狗。
你不能說我有一個函數(shù):
這樣的函數(shù)在數(shù)學(xué)上不成立的,其根本原因在于數(shù)學(xué)的運算只能適用于數(shù),這里的x代表的是一個數(shù),只能從數(shù)的集合當(dāng)中選取。
如果我們把上面的例子再復(fù)雜一下,例如:
函數(shù)f(x)=2x+1;但你要讓我算
f(x)=2貓+1,但是2x貓是什么含義,2貓能跟+1運算嗎?顯然不行,這哪里哪呀?完全是牛頭不對馬嘴。
所以,數(shù)學(xué)的函數(shù),限定了函數(shù)的取值范圍是“數(shù)”!
這和計算機(jī)的函數(shù)就有了差別。
計算機(jī)的函數(shù)
計算機(jī)也是建立在數(shù)學(xué)的原理之上,從計算機(jī)的本質(zhì)上講,
拋開計算機(jī)的物理硬件屬性(硬件部分)來說,單看計算機(jī)的邏輯屬性(即軟件部分),也就是基于計算機(jī)的運作方式而保證成立的那套
只不過,計算機(jī)軟件設(shè)計人員利用
計算機(jī)的編程語言不是給計算機(jī)看的,而是給程序員看的,是方便程序員自己知道自己想讓計算機(jī)執(zhí)行什么指令。雖然程序員輸入的是一些程序代碼,但實際上這些程序代碼最終會被編譯為數(shù)(包括指令和數(shù)據(jù)等等)。
但實際上計算機(jī)的
舉幾個典型的此類操作的例子,看看它們是如何由函數(shù)構(gòu)成的:
計算機(jī)指令——實際上是一系列的編號以及相關(guān)的參數(shù),每一條計算機(jī)指令都定義了輸入值x,計算含義f,指令執(zhí)行后會產(chǎn)生對應(yīng)的輸出值和相關(guān)操作(以數(shù)字信號的方式)。 對計算機(jī)內(nèi)存的讀、寫——實際上是輸入一個地址值,輸出該地址固定長度的數(shù)據(jù)的值。 對特定設(shè)備的操作——實際上在一系列的內(nèi)存地址寫入各種數(shù)值,然后以一個數(shù)值請求處理器控制特定的設(shè)備來讀取這些數(shù)據(jù)。 顯示屏顯示圖像——是以顯存內(nèi)的大量數(shù)值作為輸入,以屏幕上的矩陣作為輸出(矩陣也是數(shù)的一種形式,至少矩陣可以等效于一個數(shù)的有序集合)。
上面是從計算機(jī)的底層機(jī)制來說的,也就是說
而對于計算機(jī)編程語言當(dāng)中的函數(shù)來說,函數(shù)就具備了更高層次的含義。諸如一個C語言的函數(shù),或者java語言的函數(shù)……
這些函數(shù)在另一個層面上體現(xiàn)了一些與數(shù)學(xué)上函數(shù)的不同。由于計算機(jī)高級語言品種非常多,我這里也就不過多展開,只說一點點抽象的共性:
在高級編程語言當(dāng)中,函數(shù)和過程(routine)具有類似的含義或者本質(zhì),這是對函數(shù)"過程"含義的強(qiáng)化,
我們在類似C語言系的語言當(dāng)中,函數(shù)、 過程和 方法等概念具有類似的含義。這些概念更突出函數(shù)的過程屬性。即在函數(shù)的運算之中,會執(zhí)行一些操作,帶來一些后果,重點在于這些操作和操作的后果,而不在于函數(shù)的輸出值。但實質(zhì)上,這些操作的后果也就是函數(shù)的輸出值。
通過函數(shù)集合的宏觀化,函數(shù)就變成了
實際上
計算機(jī)由于具備了強(qiáng)大的計算能力,于是可以高效地處理大量的函數(shù),因此在此基礎(chǔ)上,人類使得計算機(jī)的軟件體系形成了“操作”的概念,因為我們不僅僅是想要計算機(jī)通過復(fù)雜的函數(shù)計算告訴我們一個最終值,而是需要計算機(jī)通過計算出來的大量的值去做一些事情。這是將計算力變成生產(chǎn)力的關(guān)鍵。但不管操作也好、宏也好、其微觀都是建立在單個簡單的函數(shù)的基礎(chǔ)上的,其原理也是建立在數(shù)學(xué)函數(shù)的概念之上的,輸入-過程-輸出的映射是計算機(jī)的基本原理。當(dāng)硬件確保了這種基本原理的穩(wěn)態(tài)運作,就成了計算機(jī)。即便用這樣的定義去衡量中國人發(fā)明的算盤也是一樣的道理。
總結(jié)
數(shù)學(xué)上函數(shù)的概念是計算機(jī)函數(shù)概念的微觀原理基礎(chǔ)。計算機(jī)發(fā)展到高級階段之后,計算機(jī)函數(shù)的含義