新四季網

計算機編程機器人(他們發明了一門程式語言)

2023-06-01 19:02:03

計算機編程機器人?譯者 | 薛命燈Rockstar 是一門圖靈完備的動態程式語言設計這門語言的目的是能夠像寫歌詞一樣開發電腦程式它的歌詞風格主要受 20 世紀 80 年代重搖滾和電力民謠的影響,今天小編就來聊一聊關於計算機編程機器人?接下來我們就一起去研究一下吧!

計算機編程機器人

譯者 | 薛命燈

Rockstar 是一門圖靈完備的動態程式語言。設計這門語言的目的是能夠像寫歌詞一樣開發電腦程式。它的歌詞風格主要受 20 世紀 80 年代重搖滾和電力民謠的影響。

為什麼會有 Rockstar?

如果我們讓 Rockstar 成為一門真正的(雖然毫無意義)程式語言,招聘人員就不會在招聘時對「搖滾開發者」頗有微詞。

另外,它很有趣,一門基於歌詞編譯的程式語言很值得我們一試。

我們還可以用它做貼紙,誰不想在自己的筆記本電腦上貼上「認證 Rockstar 開發者」這樣的貼紙呢?

Rockstar 語言規範

注釋

我們不建議在 Rockstar 程序中使用注釋。這可是 Rockstar,所以要讓閱讀代碼的人自己從中尋找意義。但如果你堅持要使用注釋,那麼請把注釋放在括號裡。是的,這意味著你不能在算術表達式中使用括號,如果有複雜的表達式,要將它們分解為多個子句。

Tommy was a lean mean wrecking machine. (initialises Tommy with the value 14487)

變量

在 Rockstar 中,有兩種聲明和使用變量的方式。

公共變量由一個關鍵字(a、an、the、my 或 your)和關鍵字後面的變量名組成,變量名只能包含小寫 ASCII 字母 a-z。

特定變量由專有名詞組成,專有名詞是指任何不是保留關鍵字並以大寫字母開頭的單詞。特定變量名稱可以包含空格,只要每個空格後跟一個大寫字母。可能有一些開發人員會創建類似 Customer ID、Tax Rate 或 Distance In KM 這樣的變量名稱,不過我們建議你使用慣用的變量名稱,如 Tommy、Gina、Doctor Feelgood、Mister Crowley、Kayleigh、Tom Sawyer、Billie Jean 和 Janie。

Eleanor Rigby、Peggy Sue、Black Betty、Layla 和 Johnny B Goode 在 Rockstar 中也都是有效的變量名,儘管嚴格來說它們算不上是慣用的。

與 Ruby、Python 和 VBScript 一樣,Rockstar 的變量是動態類型的,所以不需要在使用前進行聲明。

代詞

關鍵詞 it、he、she、him、her、them、they 總是指向最近命名的變量。

類型

Rockstar 使用了與 ECMAScript 非常相似的類型系統,不過 undefined 聽起來不是非常搖滾,所以我們使用 mysterious 替代它。

Mysterious——任何未賦值的變量,使用關鍵字 mysterious 表示。

——空值類型,在計算時等於 0 或 false。關鍵字 nothing、nowhere 和 nobody 是 的別名。

Boolean——具有 true 和 false 值的邏輯實體。(關鍵字 maybe 和 definitely maybe 被保留下來,可能在未來會用到)。

right、yes 和 ok 是 true 的有效別名。

wrong、no 和 lies 是 false 的有效別名。

Number——Rockstar 中的數字使用 DEC64 數字類型進行存儲。

String——Rockstar 中的字符串是 16 位無符號整數值的序列。

Object——數據屬性的集合,與 ECMAScript 一樣。

字面量和賦值

Rockstar 中的字符串字面量使用雙引號括起來。

「Hello World」

Rockstar 中的單引號被視為普通的字母。這似乎有點不尋常,直到你想起來 ain't talkin』 'bout love 在搖滾中其實是一句完美有效的歌詞。

Rockstar 中的數字字面量是十進位數字。

123

3.141592654

賦值使用 put/into 關鍵字組合:

Put 123 into X 表示將 123 賦值給變量 X。

Put 「Hello World」 into the message 表示將「Hello World」賦值給 the message 變量。

遞增和遞減

我們分別使用 Build {variable} up 和 Knock {variable} down 關鍵字進行遞增和遞減。

Build my world up 將會讓 my world 的值增加 1。

Knock the walls down 將會讓 the walls 的值減 1

算術

基本的算術運算使用 plus、minus、times、over 和 by 關鍵字。

算術表達式:

plus {b}——加法,別名為 with。

minus {b}——減法,別名為 without。

times {b}——乘法,別名為 of。

over {b}——除法,別名為 by。

例子:

Put the whole of your heart into my hands——把 your heart 和 the whole 相乘,並把結果賦值給 my hands。

My world is nothing without your love——將零減去 your love,並將結果賦值給 my world。

If the tears of a child is nothing——檢查 the tears 乘以 a child 是否等於零。

My love by your eyes——返回 my love 除以 your eyes 的值。

詩意字面量

Rockstar 還支持一種獨特的語言特性,稱為詩意字面量(poetic literal)。受 here-document 語法的啟發,詩意字面量允許程式設計師在初始化變量的同時表達他們內心深處的焦灼。

詩意類型字面量

在使用關鍵字 true、false、nothing、nobody 和 nothing 進行賦值時,使用單行代碼,包括變量名、is 關鍵字和字面量。

My heart is true——使用布爾值 true 來初始化 my heart。

Tommy is nobody——使用 nobody 別名將 Tommy 的值初始化為 。

詩意字符串字面量

在進行詩意字符串字面量賦值時,以變量名作為開頭,後面跟一個關鍵字(如 says),然後再跟上一個空格。剩餘部分(直到碰到\n 終止符)被視為不帶引號的字符串字面量。

Billy says hello world!\n 表示使用字符串字面量 hello world! 來初始化 Billy。

The world says hello back\n 表示使用字符串字面量 hello back 來初始化 the world。

詩意數字字面量

在進行詩意數字字面量賦值時,以變量名作為開頭,後面跟上關鍵字 is,或者別名 was 或 were。只要下一個符號不是保留關鍵字,這一行的其餘部分將被視為一個十進位數,這個數由連續出現的字符串長度對應的數字組成。為了表示數字零,也為了彌補搖滾中缺少單字母單詞和雙字母單詞,單詞長度需要對 10 取模。句點(.)表示小數位。除第一個句點外,任何非字母字符都將被忽略。

Tommy was a lovestruck ladykiller 表示使用 100 來初始化 Tommy。

Sweet Lucy was a dancer 表示使用 16 初始化 Sweet Lucy。

A killer is on the loose 表示使用 235 初始化 a killer。

My dreams were ice. A life unfulfilled; wakin' everybody up, taking booze and pills 表示使用 3.1415926535 初始化 my dreams。

請注意,詩意字面量可以包含保留關鍵字,比如這個例子中的 taking。

比較操作

與 Visual Basic 和一些腳本語言中的單個等號運算符類似,Rockstar 中的 is 關鍵字出現在語句中還是出現在表達式中所表示的意思也不一樣。

Rockstar 中的比較操作只能在表達式中完成。

Tommy is nobody 使用 nobody 來初始化 Tommy。

If Tommy is nobody 表示在 Tommy 等於 nobody 時執行後面的代碼塊。

修飾符 not 會反轉比較操作的結果,類似於 SQL 中的 IS / IS NOT 。關鍵字 ain’t 是 is not 的別名。這種用法與慣用英語相反,其中「Tommy isn’t anybody」、「Tommy ain’t nobody」和「Tommy ain’t not nobody」表示相同的意思。

Rockstar 還支持以下的比較語法:

is higher/greater/bigger/stronger than 表示「大於」。

is lower/less/smaller/weaker than 表示「小於」。

is as high/great/big/strong as 表示「大於等於」。

is as low/little/small/weak as 表示」小於等於「。

輸入輸出

在 Rockstar 中,我們使用 Listen 關鍵字從 STDIN 讀取一行輸入,並使用 Listen to 將輸入賦值給變量。

Listen to your heart——從 STDIN 讀取一行,並將它賦值給 your heart。

使用 Say 關鍵字將變量的值寫到 SDTOUT。

Say Tommy——將 Tommy 的值輸出到 STDOUT。

Rockstar 將 Shout、Whisper 和 Scream 作為 Say 的別名。

流程控制和塊語法

條件語句

條件表達式以 If 關鍵字作為開頭,後面跟上表達式。如果表達式的計算結果為 true,則執行後續的代碼塊。在 If 代碼塊之後可以有可選的 Else 代碼塊。如果 If 表達式計算結果為 false,則執行 Else 關鍵字後面的代碼塊。

循環

與 If 語句類似,循環使用 While 或 Until 關鍵字表示,只要表達式得到滿足,後面的代碼塊會被重複執行:

Tommy was a dancer While Tommy ain't nothing, Knock Tommy down

使用 16 初始化 Tommy,然後循環,每次將 Tommy 減 1,直到 Tommy 等於零。

break 和 continue 語句的用法與其他大多數基於代碼塊的語言一樣。Rockstar 將 Break it down 定義為 break 的別名,並將 Take it to the top 定義為 continue 的別名。

代碼塊

Rockstar 中的代碼塊以 If、Else、While 或 Until 作為開頭,並以空行或 EOF 作為結尾。

Tommy was a dancer While Tommy ain't nothing Shout it Knock it down

函數

函數使用變量名和後面的 take 關鍵字以及由 and 關鍵字分隔的參數列表進行聲明。

Multiply takes X and Y

Search takes Needle and Haystack

函數體是一個沒有空行的語句列表。空行表示函數體的結束。Rockstar 中的函數總是有返回值,使用 Give back 關鍵字表示。

使用 taking 關鍵字調用函數:

Multiply taking 3, 5 相當於 returning (presumably) 15

Search taking "hands", "lay your hands on me"

示 例

使用極簡的 Rockstar 表達 FizzBuzz,為了清晰起見,使用了縮進:

慣用的 Rockstar,使用詩意字面量,沒有縮進:

一些想法

如果有可能,嘗試改進這門語言。我並不熱衷於連續塊語法——對於初學者來說,還無法實現嵌套塊。

想辦法實現圖靈完備的搖滾民謠編譯器。或許是基於 BF 的東西,我們使用單詞長度或首字母或其他東西將歌詞編譯成 BF,或者其他一些極簡但圖靈完整的語言。

製作」認證 Rockstar 開發者「貼紙,並將它們發給任何可以寫 Rockstar 代碼的人。

使用 composer 為代碼生成樂譜。

相關實現

rockstar-js——Rockstar-to-JavaScript 編譯器

http://github.com/wolfgang42/rockstar-js

rockstar-lexer——使用 Haskell 編寫的 Rockstar 詞法分析器

http://github.com/aitorres/rockstar-lexer

rockstar-java——Rockstar 的 Java 解釋器

http://github.com/nbrevu/rockstar-java

rockstar-py——Rockstar-to-Python 編譯器

http://github.com/yanorestes/rockstar-py

英文原文

http://github.com/dylanbeattie/rockstar

今日薦文

點擊下方圖片即可閱讀

獨家丨對話亞麻徐 CTO Werner Vogels

技術是沒有邊界的,保持技術敏感性和快速學習能力程式設計師進階的重要因素,《程式設計師進階攻略》相信會給予正在成長階段的你很多啟發與指引。識別下圖二維碼,即刻訂閱!

同类文章
 陳冠希被曝當爸爸 老婆維密超模露點照觀看

陳冠希被曝當爸爸 老婆維密超模露點照觀看

6月12日,有網友曬出陳冠希和秦舒培為女兒舉辦百日宴的照片,陳冠希抱著女兒盡顯父愛,身旁站著秦舒培和家人。網友還曝陳冠希女兒名字是Alaia,此前秦舒培曾多次被傳懷孕及在美國生產。去年陳冠希秦舒培曾同逛嬰兒用品店;今年1月有網友偶遇秦舒培,稱其肚子凸起;今年4月有爆料稱秦舒培已誕下女兒。秦舒培是90
 日本十八禁的工口遊戲 電車之狼尾行系列你喜歡哪個?

日本十八禁的工口遊戲 電車之狼尾行系列你喜歡哪個?

工口遊戲,很多人應該都聽說過,工口遊戲其實就是日本遊戲產業裡面一些尺度較大的遊戲,我們也都了解日本的遊戲行業是很發達的,其中自然也少不了一些涉及大尺度的色情遊戲,工口遊戲就是這個一個類別的,下面讓我們來盤點幾個日本十八禁的工口遊戲。日本十八禁的工口遊戲:一、性感沙灘那個被碧撥蕩漾清可見底的海水圍繞的
 韓國十大被禁播的女團MV 尺度太大令人慾罷不能(視頻)

韓國十大被禁播的女團MV 尺度太大令人慾罷不能(視頻)

韓國的女團是一直是以性感而聞名,不僅在韓國有一大批的粉絲,就連中國和歐美國家也有一大票的粉絲,小編自然也是韓國女團粉絲大軍中的一員,看過韓國女團MV的人都知道,一向尺度是非常大的,各種誘惑性的東西看得欲罷不能,然而也正是因為尺度太大而遭到禁播,下面就讓我們一起去看看那些被禁播的MV。一、Stella
 莫菁門事件始末 因愛生恨散布大量豔照

莫菁門事件始末 因愛生恨散布大量豔照

莫菁門事件是發生在2010年廣西柳州的一次「豔照門事件」,那時候時下流行各種門事件,而廣西柳州莫菁門事件之所以能引起網絡上極大的討論,就是因為網友認為發帖者的行為已經超越了道德底線,莫菁門事件中究竟有什麼愛恨情仇呢?莫菁門事件:莫菁,女,廣西柳州人。2010年11月,一名柳州女子的不雅「豔照」在網際
 陳法蓉萬人騎是什麼意思?她演過哪些三級片?

陳法蓉萬人騎是什麼意思?她演過哪些三級片?

陳法蓉是香港著名的女藝人之一,曾經還獲得1989年香港小姐的冠軍,可以說是一位老牌的港姐代表,曾經也有演過三級片,網上曾經有一種對於她的說法是「萬人騎」,說的就是她的感情經歷十分豐富,交往過很多任的男朋友,最後都沒有一個好的結果。陳法蓉介紹:陳法蓉,1967年10月28日出生於香港,祖籍江蘇宿遷,中
 蔣英與李雙江婚外情?關係曖昧是真的嗎?

蔣英與李雙江婚外情?關係曖昧是真的嗎?

蔣英是中國最傑出的女聲樂家,中國航天之父錢學森的夫人,武俠小說大師金庸的表姐,大詩人徐志摩的表妹,看到這麼多人的名字你一定會驚嘆,而在網上曾有流傳蔣英與李雙江的婚外情事件也是引起不小的轟動,蔣英與李雙江是真的嗎,讓我們一起去揭秘事情的真相。蔣英簡介:蔣英生於1919年9月7日,浙江海寧人,中國最傑出
 《狼心狗肺》《你的淺笑》誰曲子更密鑼緊鼓

《狼心狗肺》《你的淺笑》誰曲子更密鑼緊鼓

港島妹妹和梵谷先生:天津嘉年華梁龍說:這不都坐著呢嗎我們說:坐下,牛逼安保說:菠菜賤賣。2019年10月28日 (114)|lululu0726:搖滾是音樂 聽音樂不聽音樂光聽歌詞?前戲不重要麼各位?2020年11月16日 (51)|死在柯本槍下:前面叨咕的是不是:上班了上班了他媽媽沒話說?2021
 柯凡錄音門事件 因侮辱詹姆斯而遭到封殺?

柯凡錄音門事件 因侮辱詹姆斯而遭到封殺?

柯凡,中國籃球解說員,看過NBA的朋友肯定對於他不會太陌生,柯凡搭檔過很多著名的體育解說員,但是因為在2015-2016NBA總決賽期間曝出的錄音門事件中侮辱了詹姆斯被球迷口誅筆伐,柯凡也因此被暫時停止工作反省,柯凡究竟有沒有被封殺呢?柯凡簡介:柯凡,男,北京市人,1986年3月29日出生。籃球解說
 病態三部曲背後虐心的故事 打回原形/防不勝防/十面埋伏

病態三部曲背後虐心的故事 打回原形/防不勝防/十面埋伏

黃偉文是香港樂壇著名的作詞人,他給很多音樂人都寫過歌詞也都是耳熟能詳,比如說《可惜我是水瓶座》《浮誇》《下一站天后》《喜帖街》等等,他的歌能讓人產生非常多的共鳴,在病態三部曲中更是引起無數人對於愛情的遺憾,他的病態三部曲分別是哪三首呢?病態三部曲:《打回原形》《打回原形》講愛之卑微。在愛情裡面,人難
 《愛你這樣傻》與《你從未說過愛我》哪首變幻莫測

《愛你這樣傻》與《你從未說過愛我》哪首變幻莫測

南極不季寞:90後聽這種歌的還有幾個2015年9月20日 (6017)|Ea-bon:真系好聽無得頂啊,睇下幾多人卑贊!!12015年12月2日 (2092)|麥芽先生:唱歌的也傻聽歌的也傻2015年3月27日 (867)|六級詞彙小能手:22歲的阿姨沒有談過戀愛但是喜歡著一個人。2017年10月1