精華區beta ck48th331 關於我們 聯絡資訊
不知道版上有多少同學還記得高一學的快速貝斯克?或者是看得懂嘻語言的。 先說說貝斯克語言吧。 電腦(目前)不懂人類的語言(就是自然語言,如中文英文), 當我們要請它們為我們辦事時,就要使用特殊的語言下命令。 完成一件事的所有命令「可以」視為一個整體,「可以」稱之為程式。 好像上級下達的公文一樣。 要請電腦在螢幕上顯示 love, 可以用貝斯克語言這樣告訴它: PRINT "love", 然後它就做好了。(不需前戲) 這一行就是一個簡單的程式。 聰明的人總想把工具的使用變成藝術,於是就有人想, 有沒有辦法寫一個程式,電腦執行它的結果是「在螢幕上顯示出這個程式的內容」呢? 例如是否有一個程式用某種語言寫好後的模樣如下: Ich liebe dich Te amo 然後電腦執行後,就剛好在螢幕上顯示 Ich liebe dich Te amo 這幾個字母與空白呢? 用貝斯克語言的 PRINT 時我們發現無論如何總是多一個 "PRINT" 出來: PRINT "PRINT" 執行結果是 PRINT 貝斯克語言是個古老的語言,到底有沒有人用它來辦到這件事,我不知道, 但我知道後起之秀「嘻語言」的確可以辦到,而且寫法還不只一種。 我第一次看到 self-production 這個形容字時還不以為意, 直到執行了一個小小的,只有一行,看起來很怪異的程式後,就嚇到了。 花了幾分鐘把它看懂,然後讚嘆。 後來有一天我重新思考這個問題,是什麼讓嘻語言有這種能力辦到的呢? 我後來發現用自然語言來比喻,實在是太恰當了。 嘻語言是一個「沒有輸出輸入指令」的語言,而貝斯克是「有這種指令」的語言。 對於貝斯克而言, PRINT 就是語言中的一個字,可以用來在螢幕上顯示訊息。 嘻語言裡並沒有這種字或符號,那,我們要怎麼用它來顯示訊息? 這就需要新的約定,使用嘻語言本身既有的文法約定一個新的詞或符號來顯示訊息, 以後電腦看到由這個新詞或新符號寫成的命令時,就可以顯示訊息了。 這就好比中文裡面本來沒有「寫程式」這個詞,但是現在約定它的意義與用法後, 以後我們就可以很方便地使用,而且很重要的一點是有得到幾乎全部使用者的認同。 所以嘻語言本身雖然沒有一個內建的或既有的指令可以在螢幕上顯示訊息, 但經由我們很熟悉的一種自然語言的機制,它還是可以辦到。 在 self-production 的程式中,嘻語言到底做了什麼? 這和下面敘述的情況是一樣的:我和一個人約好,我每說一句話, 他就把我說的東西寫在紙上。就只是這樣而已! 「我和他約好要怎麼做,然後我說話」,這就是寫程式。 「我說的東西被寫在紙上」,這就是顯示訊息。 嘻語言的 self-production 程式(至少就我看過的版本而言), 其中有一道命令做的事情就是「去請另一個已經寫好的程式」來幫忙。 然後一切的語法合乎嘻語言文法,而且那個「已經寫好的程式」的程式碼, 並不出現在 self-production 程式中,它只是被請來幫忙而已, 而且它本身可能也不是用嘻語言寫成的;這就造出剛剛那種奇蹟。 這是很淺顯的原理,而且日常生活中我們都在用。 這是「一種」達到 self-production 的方法。 於是我們知道 self-production 原來可以人為做出,可以刻意安排。 我們可以在自然語言中達到,也可以新創一種電腦語言時略加注意相關約定, 或者改善舊語言的執行環境,只要它本身沒有太過嚴格的限制, 這樣新舊語言都一樣可以辦到。 但是正如同魔術師展示出他的小道具,他隱藏的口袋後,大家鬆了一口氣, 然後說一句「什麼嘛,原來只是這樣而已!」 我們可以如此地不敬嗎?並不可以的! 因為我不相信嘻語言的創造者是為了玩出 self-production 的戲法, 才加入某些語言功能。而後人可以根據所有合法的語言特性玩出這種花樣, 這不是對語言的膚淺了解就可以辦到的。 所以結論是我們不能使用「能否寫出 self-production 程式」來評斷一個語言的價值。 英文不及中文的方塊文字可以對仗公整,渾然天成,但百年前也出了個王爾德來。 -- I am, therefore I think. -- ※ 發信站: 批踢踢實業坊(ptt.twbbs.org) ◆ From: nlpc30.intel-lab.csie.ntu.edu.t