扯淡之——世界上先有雞還是先有雞蛋

扯淡之——世界上先有雞還是先有雞蛋

 

“世界上先有雞還是先有蛋”是一個非常著名的思辨難題,至今爲止也沒有標準的答案,甚至還有科學研究。

蛋白質方面的研究

       一隻小雞正在從蛋殼裏孵化出來。

      英國華威大學的馬克·羅傑教授與大衛教授在幫助謝菲爾德大學進行試驗研究時,發現形成雞蛋方解石晶體硬殼的關鍵雞肉蛋白“OC-17蛋白”(ovocleidin-17)的存在貫徹了整個蛋殼的形成過程並起到了催化的作用,這使得他們認爲在“先有雞還是先有蛋”的問題裏首先存在的是雞,或者確切的說是OC-17這種雞肉蛋白。不過馬克·羅傑在報告中的附加引述中說到:“這個發現難道就能證明先有雞再有蛋嗎?我們想強調的‘先有雞還是先有蛋’這個問題雖然很有趣但是事實上卻毫無意義。不過這個研究倒是使得學界對高效快速的結晶方法有了新的見解,這項研究也能夠在骨頭的形成以及二氧化碳是如何被貯存在石灰石等問題上提供幫助。”[9]

    不過,他們的研究卻與早先時候的研究結論有些出入。約翰·布魯克菲爾德(John Brookfield)與大衛·帕皮諾(David Papineau)教授認爲,在世界上第一隻雞出現後,在它之前也必定需要並有一顆能夠孵出它來的蛋[10]。生物學家邁爾斯進一步的指出了前者在研究中的瑕疵,稱其他的鳥類會使用與OC-17不同的蛋白質來製造鳥蛋,而且OC蛋白的演變並不能夠與鳥蛋的演變向吻合;OC蛋白是從一種古老的蛋白質演變而來,這種蛋白在鳥類分支從爬行動物分離之前便開始參與制造動物的蛋[11]。

          摘自維基百科《先有雞還是先有蛋

 

    研究者說先有突變的雞基因,可是對於“世界上先有雞還是有雞蛋”問題沒有切確的答案,或者說非常有說服力的證據。

 

宗教觀點與神話故事

主條目:創造論

       猶太教及基督教的神話傳說中都表明是上帝創造了世間的種種,其中也當然包括鳥。猶太教及基督教的神話中提到上帝創造了鳥類並讓它們繁衍後代,但是神話中並沒有提到蛋的事。例如創世紀第一章:

      19有晚上,有早晨,是第四日。20神說,水要多多滋生有生命的物,要有雀鳥飛在地面以上,天空之中。21神就造出大魚和水中所滋生各樣有生命的動物,各從其類。又造出各樣飛鳥,各從其類。神看着是好的。22神就賜福給這一切,說,滋生繁多,充滿海中的水。雀鳥也要多生在地上。

      飛鳥爲統稱,並沒有明確說明是否事先有鳥還是先有蛋?

       在印度的經書中記載,神創造了鳥及其他一切生命形式。不過,印度的傳說中所談到的蛋被擴大到了非雞蛋的蛋的範圍,印度的神話也提到了“宇宙蛋”(即梵天誕生的金卵,金卵的其他部分擴張爲整個宇宙)這個概念。

      而在中國神話中,認爲天地是由盤古“開天闢地”所致,而當時混沌的世界就如同一個蛋一樣。

          摘自維基百科《先有雞還是先有蛋

 

     神話中也是如此,沒有明確提及到底神先創造了雞蛋還是先創造了雞,只說了創造了飛禽走獸。

 

       “世界上先有雞還是先有雞蛋”存在辯證歧義的原因在於,如果先有雞,那麼孵出雞的蛋是不是雞蛋;如果先有雞蛋,那麼是不是隻有雞生的蛋纔算是雞蛋。從概念定義上分析,無論是先有雞還是先有雞蛋,兩種答案都無法避開對方,任何一方的概念定義都需要另一方支撐。從生物學上分析,卵生動物的基因突變可以在母體形成蛋的時候進行突變,也可以在蛋離開母體的時候受到輻射或者化學物質導致的突變,假如在母體內形成蛋的過程中突變(離開母體之前)成雞的基因,那麼下蛋後這顆蛋就是雞蛋,因爲它孵出來100%是小雞,所以先有雞蛋;假如蛋離開母體之後受到周圍環境影響才基因突變爲雞的基因,那麼這顆蛋在生成時不是雞蛋,但是出生的就是雞,所以先有雞,或者說這顆蛋是從別的蛋突變爲雞蛋,可是生物學沒有這樣的定義。

        本人也不懂生物學。在概念和常識上雞和雞蛋是相互依賴的——雞蛋是雞生的以及雞是從雞蛋中孵出來的;聯繫到編程中的概念——整體與部分,雞和雞蛋是一個整體,雞出生依賴於雞蛋,雞蛋創造依賴於雞,部分無法獨立於整體而存在,雞無法與“雞和雞蛋”撇開關係,同樣雞蛋也無法與“雞和雞蛋”撇開關係,兩個無法完全獨立的部分組成了一個整體。在UML中跟“世界上先有雞還是雞蛋”關係最爲相似就是組合關係依賴關係

依賴關係(Dependence):假設A類的變化引起了B類的變化,則說名B類依賴於A類。

大多數情況下,依賴關係體現在某個類的方法使用另一個類的對象作爲參數。

依賴關係是一種“使用”關係,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關係。

 

組合關係(Composition):也是整體與部分的關係,但是整體與部分不可以分開.

• 組合關係(Composition)也表示類之間整體和部分的關係,但是組合關係中部分和整體具有統一的生存期。一旦整體對象不存在,部分對象也將不存在,部分對象與整體對象之 間具有同生共死的關係。

• 在組合關係中,成員類是整體類的一部分,而且整體類可以控制成員類的生命週期,即成員類的存在依賴於整體類。在UML中,組合關係用帶實心菱形的直線表示。

 

從生命週期上,雞和雞蛋相互依賴——依賴關係;從概念定義上,雞和雞蛋達成組合關係,相互配合完成了各自的定義。

在C++中對於先有雞還是雞蛋也有類似現象。例如以下定義

A.h

===================

class A {
public:
    B memberB;
};

 

B.h

=======================

class B {
public:
    A memberA;
};

       如果編譯的時候直接鏈接A.h和B.h(假設A.h放在B.h之前),那麼編譯器會報錯找不到類B。這種情況對於新手非常棘手,大學時候在寫畢業設計時候就遇到這樣問題,當初卡了大半天,後來才明白C和C++編譯器允許先聲明後定義,類型只要聲明後就可以直接使用。所以可以改爲

A.h

===================

class B;
class A {
public:
    B memberB;
};

B.h

========================

class A;
class B {
public:
    A memberA;
};

編譯就不會報錯。

 

另外一種特殊情況就是鏈表節點聲明定義

Node.h

=====================

template<class T> class Node {

public:
    T data;
    Node<T> *next;
};

對於編譯器來講也是先聲明後定義,先聲明瞭Node類,然後再定義Node結構體的內容。並且千萬記住,Node類的定義中只允許Node的聲明引用,不允許有Node的實例。以下代碼編譯器會報錯

Node.h

=====================

template<class T> class Node {
public:
    T data;
    Node<T> next;// 因爲找不到Node的實體,必須用指針引用定義,不支持直接實例化,因爲定義不全,如果支持就是引起編譯器循環遞歸,變成了先有雞還是先有雞蛋的問題了。
};

以上兩種情況我們可以把聲明看做雞蛋,定義看做雞,先有雞蛋,然後纔能有雞。如果雞蛋不完整,那麼是不能存在雞的(Node例子)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章