SHRDLU 是由特里・威諾格拉德於 1968 年至 1970 年在麻省理工學院開發的一種早期的自然語言理解電腦程式 。在該程式中，用戶可以與電腦對話，對這種精簡的「 積木世界」的內部狀態進行移動物體、命名集合、查詢等操作（積木世界本質上是一個虛擬盒子，內部充滿了不同積木）。

SHRDLU 是以 Micro Planner 和 Lisp 程式語言在 DEC PDP-6 電腦和 DEC 圖形終端上編寫而成 。 後來在猶他大學的計算機圖形實驗室進行了補充，加入了對 SHRDLU「世界」的完整 3D 渲染。

名稱「SHRDLU」衍生自 ETAOIN SHRDLU， ETAOIN SHRDLU 是 Linotype 排字機上字母鍵配置，也就是照字母使用頻率，以降序方式排列的 12 個字母序列。



功能

SHRDLU 主要是一種語言解析器，它允許用戶使用英語術語進行互動 。 用戶指示 SHRDLU 在「積木世界」中移動各種物體，包含各種基本物體：積木（塊體）、錐體、球體等。 SHRDLU 的獨特之處在於將四個簡單想法的組合起來，這些想法加總在一起，使得在對「理解力」的模擬上，更具說服力。

其中一個原因是，SHRDLU 的世界非常簡單，以致於整個物體和位置的集合可以透過大約 50 個單詞來描述：名詞如 "積木"（block）和 "錐體"（cone），動詞如 "放置在"（place on）和 "移動到"（move to），以及形容詞如 "巨大的"（big）和 "藍色的"（blue）。這些基本的語言建築模塊的可能組合相當簡單，程式完全有辦法弄懂用戶的意思。

SHRDLU 還包括一個基本記憶體來提供語境。人們可以要求 SHRDLU「把綠錐放在紅塊上」，然後「把錐子拿下來」；「錐體」會被認為是指剛才說的綠錐。在大多數情況下，當提供了額外的形容詞時，SHRDLU 可以透過互動進一步回溯尋找合適的語境。用戶也可以問一些歷史問題，比如「在撿到錐體之前，你有沒有撿過任何東西？」

這種記憶體的附帶效果，也是 SHRDLU 標准配置的基本規則，即該程式可以回答關於世界上什麼問題是可能的，什麼問題是不可能的。SHRDLU 會透過尋找例子推斷出積木可以堆疊，但在嘗試過三角形後，會了解到三角形不能堆疊。「世界」包含了使積木掉落的基本物理機制 ，而這與語言解析器無關。

最後，SHRDLU 還可以記住物體的名稱或它們的排列方式。例如，人們可以說 "尖塔是一個高大的長方形上面的小三角形"；SHRDLU 就可以回答積木世界中關於尖塔的問題，並建造新的尖塔。



選錄

這是 SHRDLU 的著名演示： 

> 
> 
> 　
> : 人：Pick up a big red block.
> 
> 　
> : 電腦： OK.
> 
> 　
> : 人：Grasp the pyramid.
> 
> 　
> : 電腦：I DON'T UNDERSTAND WHICH PYRAMID YOU MEAN.
> 
> 　
> : 人：(changing their mind): Find a block which is taller than the one you are holding and put it into the box.
> 
> 　
> : 電腦：BY "IT", I ASSUME YOU MEAN THE BLOCK WHICH IS TALLER THAN THE ONE I AM HOLDING.
> 
> 　
> : 電腦：OK.
> 
> 　
> : 人：What does the box contain?
> 
> 　
> : 電腦：THE BLUE PYRAMID AND THE BLUE BLOCK.
> 
> 　
> : 人: What is the pyramid supported by?
> 
> 　
> : 電腦：THE BOX.
> 
> 　
> : 人：How many blocks are not in the box?
> 
> 　
> : 電腦：FOUR OF THEM.
> 
> 　
> : 人：Is at least one of them narrower than the one which i told you to pick up?
> 
> 　
> : 電腦：YES, THE RED CUBE.
> 
> 　
> : 人：Is it supported?
> 
> 　
> : 電腦：YES, BY THE TABLE.
> 
> 　
> : 人：Can the table pick up blocks?
> 
> 　
> : 電腦：NO.
> 
> 　
> : 人：Can a pyramid be supported by a block?
> 
> 　
> : 電腦：YES.
> 
> 　
> : 人：Can a pyramid support a pyramid?
> 
> 　
> : 電腦：I DON'T KNOW.
> 
> 　
> : 人：Stack up two pyramids.
> 
> 　
> : 電腦：I CAN'T.
> 
> 　
> : 人：Will you please stack up both of the red blocks and either a green cube or a pyramid?
> 
> 　
> : 電腦：OK.
> 
> 　
> : 人：Which cube is sitting on the table?
> 
> 　
> : 電腦：THE LARGE GREEN ONE WHICH SUPPORTS THE RED PYRAMID.
> 
> 　
> : 人：Is there a large block behind a pyramid?
> 
> 　
> : 電腦：YES, THREE OF THEM: A LARGE RED ONE, A LARGE GREEN CUBE, AND THE BLUE ONE.
> 
> 　
> : 人：Put a small one onto the green cube which supports a pyramid.
> 
> 　
> : 電腦：OK.
> 
> 　
> : 人：Put the littlest pyramid on top of it.
> 
> 　
> : 電腦：OK.
> 
> 　
> : 人：Does the shortest thing the tallest pyramid's support supports support anything green?
> 
> 　
> : 電腦：YES, THE GREEN PYRAMID.
> 
> 　
> : 人：What color is it?
> 
> 　
> : 電腦：BY "IT", I ASSUME YOU MEAN THE SHORTEST THING THE TALLEST PYRAMID'S SUPPORT SUPPORTS.
> 
> 　
> : 電腦：RED
> 
> 　
> : 人：How many things are on top of green cubes?
> 
> 　
> : 電腦：I'M NOT SURE WHAT YOU MEAN BY "ON TOP OF"IN THE PHRASE "ON TOP OF GREEN CUBES" .
> 
> 　
> : DO YOU MEAN:
> 
> 　
> : 
> 
> 　
> : 1 - DIRECTLY ON THE SURFACE
> 
> 　
> : 2 - ANWHERE ON TOP OF ?
> 
> 　
> : 
> 
> 　
> : 人：2
> 
> 　
> : 電腦：THREE OF THEM.
> 
> 　
> : 人：Had you touched any pyramid before you put the green one on the little cube?
> 
> 　
> : 電腦：YES, THE GREEN ONE.
> 
> 　
> : 人：When did you pick it up?
> 
> 　
> : 電腦：WHILE I WAS STACKING UP THE RED CUBE, A LARGE RED BLOCK AND A LARGE GREEN CUBE.
> 
> 　
> : 人：Why?
> 
> 　
> : 電腦：TO GET RID OF IT.
> 
> 　
> : 人：Why did you do that?
> 
> 　
> : 電腦：TO CLEAN OFF THE RED CUBE.
> 
> 　
> : 人：Why did you clear off that cube?
> 
> 　
> : 電腦：TO PUT IT ON A LARGE GREEN CUBE.
> 
> 　
> : 人：Why did you do that?
> 
> 　
> : 電腦: TO STACK UP THE RED CUBE , A LARGE RED BLOCK AND A LARGE GREEN CUBE.
> 
> 　
> : 人：Why did you do that?
> 
> 　
> : 電腦：BECAUSE YOU ASKED ME TO.
> 
> 　
> : 人：How did you do it?
> 
> 　
> : 電腦：BY PUTTING A LARGE RED BLOCK ON THE TABLE ; THEN LETTING GO OF IT ; THEN PUTTING A LARGE GREEN CUBE ON IT ; THEN LETTING GO OF THAT CUBE ; THEN PUTTING THE RED CUBE ON THAT CUBE; THEN LETTING GO OF THAT CUBE.
> 
> 　
> : 人：How many objects did you touch while you were doing it?
> 
> 　
> : 電腦：FOUR OF THEM.
> 
> 　
> : 人：What did the red cube support before you started to clean it off?
> 
> 　
> : 電腦：THE GREEN PYRAMID.
> 
> 　
> : 人：There were five blocks to the left of the box then.
> 
> 　
> : 電腦：NO, ONLY FOUR OF THEM: THE RED CUBE, TWO LARGE GREEN CUBES AND A LARGE RED BLOCK.
> 
> 　
> : 人：Put the blue pyramid on the block in the box.
> 
> 　
> : 電腦：OK.
> 
> 　
> : 人：Is there anything which is bigger than every pyramid but is not as wide as the thing that supports it?
> 
> 　
> : 電腦：YES, THE BLUE BLOCK.
> 
> 　
> : 人：Does a steeple
> 
> 　
> : 電腦 (interrupting)：SORRY, I DON'T KNOW THE WORD "STEEPLE".
> 
> 　
> : 人：A "steeple" is a stack which contains two green cubes and a pyramid.
> 
> 　
> : 電腦：I UNDERSTAND.
> 
> 　
> : 人：Are there any steeples now?
> 
> 　
> : 電腦：NO.
> 
> 　
> : 人：Build one.
> 
> 　
> : 電腦：OK.
> 
> 　
> : 人：Call the biggest block "superblock".
> 
> 　
> : 電腦：OK.
> 
> 　
> : 人：Have you picked superblock up since we began?
> 
> 　
> : 電腦：YES.
> 
> 　
> : 人：Why did you drop it?
> 
> 　
> : 電腦：BY "IT", I ASSUME YOU MEAN THE SUPERBLOCK.
> 
> 　
> : I CAN'T EXPLAIN A NON-EXISTENT EVENT.
> 
> 　
> : 人：Is there anything to the right of the red pyramid?
> 
> 　
> : 電腦：YES, FOUR THINGS: THE BOX , THE RED CUBE, THE BLUE PYRAMID AND THE BLOCK NAMED SUPERBLOCK
> 
> 　
> : 人：Thank you.
> 
> 　
> : 電腦：YOU'RE WELCOME!
> 
> 



影響

SHRDLU 被認為是人工智慧一次極其成功的演示。這導致其他 AI 研究人員過分樂觀，但後來的系統試圖處理現實中的更具模糊性和複雜性的情況時，這種樂觀情緒很快就消失了。後續與 SHRDLU 同型的工作（例如 Cyc ）則傾向於專注為程式提供更加豐富的資訊，藉此從中獲得結論。

儘管不是有意為之，但是 SHRDLU 被認為是文字冒險遊戲第一個已知的正式實例，這是因為用戶能夠以簡單的指令在虛擬環境中移動物體來進行互動，儘管缺乏了常見於文字冒險遊戲中特有的故事敘述。 1976-1977 年的遊戲《巨洞冒險》被廣泛認為是文字冒險遊戲的第一個真正作品。 



參見


* 規劃器程式語言



參考文獻


* Terry Winograd, "Procedures as a Representation for Data in a Computer Program for Understanding Natural Language"（頁面存檔備份，存於網際網路檔案館）, MIT AI Technical Report 235, February 1971

* _Understanding Natural Language_ by T. Winograd, Academic Press, 1972



外部連結


* SHRDLU（頁面存檔備份，存於網際網路檔案館） – Terry Winograd's SHRDLU page, includes source code

* SHRDLU resurrection（頁面存檔備份，存於網際網路檔案館） – re-written versions of SHRDLU, including a Java3D version