成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

神奇的自產(chǎn)生程序,兼談人工生命

開發(fā) 前端
最近讀到馮·諾依曼的《Theory of Self-Reproducing Automata》的中譯本,被自復(fù)制自動機(jī)理論深深吸引了!生命是什么?這本書讓我對生命有了新的認(rèn)識。

最近讀到馮·諾依曼的《Theory of Self-Reproducing Automata》的中譯本,被自復(fù)制自動機(jī)理論深深吸引了!生命是什么?這本書讓我對生命有了新的認(rèn)識。

熱力學(xué)第二定律是宇宙的死亡法則:系統(tǒng)的熵總是趨于增加,系統(tǒng)總是由有序趨向無序,由有形趨向混沌,***終結(jié)于熱寂。宇宙萬物都逃不過這條法則,唯有生命例外。通過與外界交換能量,生命可以保持內(nèi)在的有序。只有生命可以違抗熱力學(xué)第二定律。

熱力學(xué)與信息論有著內(nèi)在聯(lián)系:一個系統(tǒng)越有序,它包含的信息就越多;一個系統(tǒng)越無序,它包含的信息就越少。信息總是沿著減少的方向流動。只有生命可以抗拒這個規(guī)律:生命可以“創(chuàng)造”出信息。“創(chuàng)造”是生命之所以為生命的本質(zhì)。

生命的另一個神奇之處是,他們自己包含了自己的全部信息,他們自己可以產(chǎn)生一個跟自己一樣的新生命。唯有生命可以做到自己創(chuàng)造自己。

馮·諾依曼認(rèn)為,一個簡單的系統(tǒng)是無法抗拒熱力學(xué)第二定律的,這樣的系統(tǒng)只會越來越趨向于無序,能量會向更低的方向流動,信息會越來越少。只有當(dāng)系 統(tǒng)復(fù)雜到某一個程度的時(shí)候,不妨設(shè)為臨界點(diǎn) C ,一旦越過了這個臨界點(diǎn),系統(tǒng)可以自己創(chuàng)造自己,這樣系統(tǒng)就可以逆熱力學(xué)第二定律而上,并且變得越來越復(fù)雜。

這里的臨界點(diǎn) C 跟不少人提出的“技術(shù)奇異點(diǎn)”是一樣的:人們認(rèn)為,當(dāng)人工智能達(dá)到了這樣一種程度,即它們可以自己創(chuàng)造自己的時(shí)候,這就是人工智能真正覺醒的時(shí)候。“奇異 點(diǎn)”就是機(jī)器可以自己造出自己的時(shí)候,“奇異點(diǎn)”之后,機(jī)器將進(jìn)化,并且變得越來越復(fù)雜,超出人類所能理解的范圍,它們在某種程度上已經(jīng)具備了生命的特 質(zhì),那將是人工智能的時(shí)代。

總而言之,生命之所以區(qū)別于世界萬物,就在于生命可以包含自己的全部信息。所以下面就是我們的問題了:

問題(自產(chǎn)生程序):編寫一個程序,不讀取任何輸入,只把自己的源代碼輸出。

這個問題是個非常本質(zhì)的問題,跟使用什么編程語言無關(guān)(不要想到使用反射之類的東西)。

試想,如果要輸出自己的源代碼,那么,顯然,程序中應(yīng)該有“print …”語句。但 print 什么出來呢?如果硬要寫的話就會變成:

  1. print "print \"print ......\"" 

***是一個無限循環(huán)。

一般地,我們知道,如果程序 A 能產(chǎn)生程序 B ,那么 A 必須包含 B 的全部信息,而且應(yīng)該比 B 的信息還多,因?yàn)檫€要包含額外的打印語句。也就是說,一般情況下,信息是減少的。而這個自產(chǎn)生程序,自己要包含自己的全部信息,從某種程度上已經(jīng)具有生命的意味了。

下面列出一些自產(chǎn)生程序及其思路。

需要注意的是,使用編程語言本身的反射功能或者讀取文件等做法都被視為 cheating ,比如這樣的 bash 腳本:

  1. #!/bin/sh 
  2. cat $0 

或者像這樣的 javascript :

  1. function a() { console.log(a.toString(), "a()"); } a() 

因?yàn)檫@些程序沒有體現(xiàn)出自產(chǎn)生程序的遞歸和自指特性,或者結(jié)果嚴(yán)重依賴于編程語言的具體實(shí)現(xiàn)。

輸出源代碼在該語言中的轉(zhuǎn)義

Python :

  1. s = "'s = ' + repr(s) + '\\nprint(' + s + ')'" 
  2. print('s = ' + repr(s) + '\nprint(' + s + ')') 

Lua 5.1 :  

  1. s = "string.format('s = %q\\nprint(%s)', s, s)" 
  2. print(string.format('s = %q\nprint(%s)', s, s)) 

另一個 Lua 版:

  1. s = "s = %q\ 
  2. print(string.format(s, s))" 
  3. print(string.format(s, s)) 

Scala :

  1. def e(s: String) = ("\"" + s.replace("\\", "\\\\").replace("\"", "\\\"") + "\"") 
  2. val s = "\"\"\"def e(s: String) = (\"\\\"\" + s.replace(\"\\\\\", \"\\\\\\\\\").replace(\"\\\"\", \"\\\\\\\"\") + \"\\\"\")\"\"\" + \"\\nval s = \" + e(s) + \"\\nprintln(\" + s + \")\"" 
  3. println("""def e(s: String) = ("\"" + s.replace("\\", "\\\\").replace("\"", "\\\"") + "\"")""" + "\nval s = " + e(s) + "\nprintln(" + s + ")") 

用某種方法 encode 源代碼,使之不包含引號,然后還原出源代碼

Bash :

  1. #!/bin/sh 
  2. s='\x22#!/bin/sh\ns=\x27$s\x27\necho $(echo -e $s)\x22' 
  3. echo "#!/bin/sh 
  4. s='$s' 
  5. echo $(echo -e $s)" 

Lua 5.2 使用 load():

  1. s = "a,q,b=string.char(39),string.char(34),string.char(92) return a..'s = '..q..a..'..s..'..a..q..b..'nprint('..a..'..load(s)()..'..a..')'..a" 
  2. print('s = "'..s..'"\nprint('..load(s)()..')') 

Scala :

  1. val s = "%22val+s+%3D+%5C%22%22+%2B+s+%2B+%22%5C%22%5Cnprintln%28%22+%2B+java.net.URLDecoder.decode%28s%2C+%22UTF-8%22%29+%2B+%22%29%22" 
  2. println("val s = \"" + s + "\"\nprintln(" + java.net.URLDecoder.decode(s, "UTF-8") + ")") 

使用 eval :在 eval 的字符串中引用自己

Lua load() 的另一種用法:

  1. s = "print(string.format('s = %q load(s)()', s))" load(s)() 

js 的 eval():

  1. s = "q = String.fromCharCode(34); console.log('s = ' + q + s + q + '; eval(s)')"; eval(s) 

使用語言中的更強(qiáng)的轉(zhuǎn)義機(jī)制

類似上面的第二種,但不用引號。

Lua 的 long string :

  1. x = [["x = [".."["..x.."]".."]\nprint("..x..")"]] 
  2. print("x = [".."["..x.."]".."]\nprint("..x..")") 

Scala 的三引號:

  1. val s = """"val s = \"\"\"" + s + "\"\"\"\nprintln(" + s + ")"""" 
  2. println("val s = \"\"\"" + s + "\"\"\"\nprintln(" + s + ")") 

使用 C 的宏

先執(zhí)行傳入的參數(shù),再把參數(shù)變成字符串。

gcc :

  1. #define p(a) int main(){a;puts("p("#a")");return 0;} 
  2. p(puts("#define p(a) int main(){a;puts(\"p(\"#a\")\");return 0;}")) 

至于它們是怎么實(shí)現(xiàn)的,就留給讀者自己琢磨了。自產(chǎn)生程序也稱為 Quine ,可以參考 Quine Page 。

原文鏈接:

責(zé)任編輯:陳四芳 來源: henix的博客
相關(guān)推薦

2013-03-12 10:44:01

程序員

2021-02-01 10:47:11

人工智能機(jī)器學(xué)習(xí)技術(shù)

2025-04-24 09:03:00

2024-12-25 12:04:34

2024-12-25 14:10:00

AI人工智能設(shè)計(jì)

2013-05-09 02:19:29

2023-02-09 10:47:56

CIO首席技術(shù)官

2014-01-13 10:40:16

2022-03-02 11:31:56

數(shù)字孿生建筑物聯(lián)網(wǎng)

2012-09-04 12:25:41

用戶體驗(yàn)產(chǎn)品抄襲

2016-01-06 11:17:46

運(yùn)維阿里云故障攜程故障

2021-05-12 09:40:39

人工智能AI深度學(xué)習(xí)

2024-12-25 15:36:44

Sakana AI大模型ASAL

2015-02-04 10:58:19

PaaS云計(jì)算Docker

2018-08-06 18:36:21

2013-05-30 09:55:51

程序員分歧程序員失業(yè)的程序員

2023-06-19 08:36:30

頻率setData元素

2022-03-14 16:15:44

數(shù)字孿生建筑數(shù)字化

2018-09-13 15:40:12

2018-01-30 10:56:07

數(shù)據(jù)分析TDA拓?fù)淠P?/a>
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品在线一区 | 欧美网站一区二区 | 在线āv视频 | 91在线精品视频 | 色伊人 | 日韩在线免费视频 | 亚洲一区视频在线 | 在线小视频 | 成人久久18免费网站 | 日韩中文字幕av | 中文久久| 三级免费毛片 | 日韩欧美国产一区二区三区 | 一区二区免费在线视频 | 久草综合在线视频 | 国产成都精品91一区二区三 | 国产精品久久久久久高潮 | 亚洲国产中文在线 | 成人av观看 | 日韩精品一区二区在线观看 | 精品无码久久久久久国产 | 成人午夜毛片 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 理论片午午伦夜理片影院 | 国产成人亚洲精品自产在线 | 久久99精品国产自在现线小黄鸭 | 一区二区三区在线 | 国产精品99久久久久久宅男 | 天天拍天天操 | 国产中文字幕在线 | 久久久久9999 | 一区二区三区免费 | 黄色小视频入口 | 日韩三级在线 | 日韩精品久久久 | 免费骚视频 | 色婷婷综合久久久中文字幕 | 91在线区 | 国产精品久久一区二区三区 | 麻豆一区一区三区四区 | 亚洲欧美在线视频 |