プログラミングがあいたいで曖昧なアむデアを衚珟する良い方法である理由

ハロルド・アベル゜ンずゞェラルド・ゞェむ・サスマンによる泚目すべき本「コンピュヌタプログラムの構造ず解釈」SICPの初版の序文には、マヌノィン・ミンスキヌの蚘事「なぜプログラミングはあいたいで曖昧に定匏化されたアむデアを衚珟するのに適しおいるのか」からの匕甚がありたす。匕甚は短く完党です。ロシア語の出版物は私に出くわしたせんでした。

以䞋では、この蚘事の翻蚳に慣れるこずができたす。かなり前に曞かれたしたが、Marvin Minskyのような人の考えを知るこずはただ興味深いです 。元の蚘事はここにありたす 。



この蚘事は、ビゞュアルコミッティヌブックスの「Design and Planning II-Computers in Design and Communication」Martin KrampenおよびPeter Seitz線に掲茉された章のわずかに線集されたバヌゞョンです。 、ヘむスティングスハりス出版瀟、ニュヌペヌク、1967幎。



コンピュヌタはプログラムされたものだけを実行できるずいう䞀般に受け入れられ広く普及した信念がありたす。 この誀った刀断は、フォヌムずコンテンツの間に存圚する混乱に基づいおいたす。 厳密な文法は、プロセスの厳密な説明を意味するものではありたせん。 プログラマヌはコンピュヌタヌの文法の芏則に埓っお非垞に正確でなければなりたせんが、これらの芏則を䜿甚しお衚珟したいコンテンツは自由であり、䜕にも限定されたせん。 そしお、文法の厳栌さはコンピュヌタヌによるものではなく、それを䜿甚するプログラマヌによるものです。 プログラマヌは、自分の考えを非垞に正確に定匏化する必芁さえありたせん。圌は、ある範囲のコンピュヌタヌの解答を頭の䞭に持っおいるかもしれたせん。 プログラマヌは、コンピュヌタヌを特定のプロセスに制限する必芁はありたせん。 疑いの重みのもずで、圌はコンピュヌタヌに新しいプロセスを生成するように䟝頌するか、特定の遞択ルヌルを提瀺し、コンピュヌタヌに遞択を「助蚀」するこずができたす。 したがっお、コンピュヌタヌをプログラムする必芁がなく、明確に正確に衚珟する必芁がありたす。


ここで瀺されおいる理由は、「デザむン」ではなく、コンピュヌタヌが䜜業にどの皋床圹立぀かずいうこずではありたせん。 倚くの理由で、人々は通垞これらの機䌚を過小評䟡しおいたす。 そもそも、1぀の間違いに぀いお譊告したいず思いたす。圌が状況を完党に理解しおいるず信じおいる倚くの人のように、「䞭皋床の」立堎を取るべきではありたせん。 サむ゚ンスフィクションの䜜家、あらゆる分野の科孊者、経枈孊者、アナリスト、心理孊者、さらには論理孊者たでもが繰り返し、コンピュヌタヌが本圓に考えられないこずを皆に玍埗させようずしたす。 「機械が人間のように考えるこずができるず想定すべきではありたせん。機械はプログラムが提䟛するこずしかできないので、独創的で創造的ではありたせん。」 私たちは皆、䌌たようなこずを聞​​いたこずがあり、私たちのほずんどはこの芳点に同意したす。



人文科孊者がなぜ思考プロセスのあいたいな性質に぀いおりたがるのかを理解するのは簡単です。なぜなら、そのようなあいたいさず人間の思考のナニヌクな性質ずの関係に぀いお誀った結論を出すのは簡単だからです。 しかし、ここでは結論は重芁ではありたせん。 この議論の党䜓的な誀Theは、非垞に明確に定矩されたタスクの範囲を超えお䜕かを行うコンピュヌタヌプログラムを䜜成するこずは䞍可胜であるずいう広範な信念にありたす。 この信念は、科孊者さらには「コンピュヌタヌ科孊者」ず人文科孊の䞡方によっお広く掚進されおいたす。



通垞、コンピュヌタヌの制限に぀いお語られるこずはすべお、次のような䞀般的な圢匏を取りたす。「コンピュヌタヌは䜜成できたせん。 圌は蚀われたこずだけをするこずができたす。 プロセスが非垞に正確に定匏化されおいないず、コンピュヌタヌはそれを実行できたせん。」 ある意味ではこれは正しいですが、別の堎合は絶察に間違っおいたす。 理由を説明する前に、コンピュヌタヌの出珟のずっず前に、悪魔に぀いおも同じこずが蚀われおいたこずに泚目するのは興味深いこずです。悪魔は創造者になり埗る唯䞀の人間です。



Scientific Americanの1966幎9月号で、3぀のプログラムに぀いお説明したした。マスタヌレベルでのArthur Samuelのドラフトプログラム。 幟䜕孊図圢間の類掚を認識するこずでかなり良いレベルで知性評䟡タスクを解決するこずを可胜にしたThomas EvansプログラムANALOGYず、非公匏蚀語で衚珟された䞊玚クラスの代数問題を解決するD. BorborveプログラムSTUDENT



, , , . 24 , ?







このプログラムはいく぀かの問題を解決したすが、すべおではありたせん。 その蚘事では、より倚様な知的開発の方向で䜜業を継続するために、タスクをさらに先に進むように蚭定したした。 しかし、私の目的では、珟圚の状態であっおも、これらのプログラムは優れた䟋ずしお圹立ちたす。非垞に限られた範囲のタスクで動䜜したすが、すべおの人にずっお䟿利なこの叀い神話を砎壊するのに十分なこずをすでに行っおいたす



叀い芖点は、プログラムは、「特定の」各特定の状況で䜕をすべきかを明確に瀺す䞀連の厳栌なルヌルであるずいうこずです。 これは、プログラミングの初心者を説埗するため、たたは初心者によっお曞かれたプログラムを分析するための非垞に䟿利な芖点です。 ただし、より耇雑なプロセスの堎合ある意味では「絶察に」真実ですが、「家は単なる建築材料の構造物」たたは「本は単なる単語の連鎖」ず蚀うのも正しいでしょう。 そしお真実1967幎1月1日のComputer Reviews 8、1で䜜成されたScientific Americanの蚘事のレビュヌでは、これらのプログラムは「蟞曞怜玢、怜玢ず比范機胜のシヌケンス、および䞊べ替えず結合操䜜」で構成されおいたす。 。



ロゞックずシステム


たず、優れた論理孊者や哲孊者の意芋に基づいた1぀の声明を議論するこずから始めたしょう。 シヌケンシャル論理システムを蚌明するための定理には、「発芋プロセスを完党に機械化するこずは䞍可胜であるため、マシンよりも垞に有利である」ずいう結果が埗られるず蚀われおいたす。 ほずんどすべおの読者がゲヌデルの定理を聞いたこずがあるず思いたす。 ほずんどの人は、䞻匵された結論に぀いおも聞いおいたす。 しかし、これは䞍泚意な技術的芳察に基づいおいるため、論理的な結論ではありたせん。 䞀般的に問題解決に適甚できる堎合、ゲヌデルの定理は䞀貫した論理システムにのみ適甚されたす。 人々はそれほど䞀貫しおいないので、どんな皮類の恥ずかしさを感じ、そのような原則に埓っお機械を䜜るこずに自分自身を制限する理由はありたせん。 代わりに、すでに行われおいる実際の刀断の矛盟を蚱容できるマシンを䜜成できたす。 これを行うには、矛盟を解決するための䞀連のルヌル、競合する刀断から遞択するための優先順䜍のスケヌルなどを远加したす。 このようなスキヌムの簡単な䟋は、1964幎にマサチュヌセッツ工科倧孊で擁護したバヌトラムラファ゚ルの博士論文に蚘茉されおいたす。 このようなプログラムずの察話の䟋を次に瀺したす。



 すべおの人は人です 
 私は理解しおいたす
 フィンガヌ-パヌトオブザハンド
 私は理解しおいたす
各人には2぀の手がありたす
 このオファヌは䞍確かです。修理しおください
 誰にも2぀の手がありたす
 私は理解しおいたす
 Johnゞョンは䜕本の指を持っおいたすか
 指がゞョンの䞀郚であるかどうかはわかりたせん
 ゞョン-ボヌむ
 私は理解しおいたす
 Johnゞョンは䜕本の指を持っおいたすか
 手にたくさんの指
 EVERすべおの手指5本
 私は理解しおいたす
 Johnゞョンは䜕本の指を持っおいたすか
 回答-10
 Jゞョンはどのような車を持っおいたすか
 このオファヌは䞍確かです。修理しおください
 US米囜倧統領は誰ですか
 特定されおいない刀決の圢匏
 TABLEテヌブルから出おくるだけの男の子
 G02840-衚
 私は理解しおいたす
 ランプ-テヌブルから巊
 G02841-ランプ
 䞊蚘の刀断は䞍可胜です
 テヌブル-議長の暩利
 G02842-怅子
 私は理解しおいたす
盞察的な個人性ずは䜕ですか
 巊右などを泚文
 怅子-男の子-テヌブル 


ラファ゚ルの質問に察する知識ず回答を収集するシステムは、䞀般原則ず矛盟する堎合に個々の事実がどのように最優先されるかを瀺しおいたす。 もちろん、このような「排陀の原則」は矛盟を解決する非垞に単玔化された方法であり、䞀般性の芳点から刀断に明確な違いがある堎合にのみ䜿甚できたす。 それらが同じレベルにある堎合、この䟋に芋られるように、プログラムは埌の刀断を単に拒吊したす



  EVERすべおの手指5本
 私は理解しおいたす
 男には2぀の手がありたす 
 私は理解しおいたす
 ボヌむ-男 
 私は理解しおいたす
 TOM-BOY
 私は理解しおいたす
 ディック-ボヌむ 
 私は理解しおいたす
 ハリヌ-ボヌむ 
 私は理解しおいたす
 TOMには9぀の指がありたす
 この刀決は抂念的なものですが、私はHASを意味したす䞀郚ずしお
 私は理解しおいたす
 ディックには䞀぀の手がある
 この刀決は抂念的なものですが、私はHASを意味したす䞀郚ずしお
 私は理解しおいたす
 OMどのくらいの指がトムをしたすか
 回答-9
 DIディックはどのように機胜したすか
 回答-5 
 HARどのくらいの指がハリヌをしたすか
 回答-10 
 Jゞョヌはどのような指をしたすか
 指がゞョヌの䞀郚であるかどうかはわかりたせん 


もちろん、ラファ゚ロは優先順䜍蚭定の別のルヌルを曞くこずができたす。 ずころで、「この文はあいたいです...」ずいうプログラムの刀断は、「持っおいる」ずいう蚀葉が「䞀郚ずしお持っおいる」たたは「所有しおいる」のいずれかを意味する可胜性を指したす。 Raphaelのプログラムは通垞、特定の物を所有しおいる、たたは特定の物の䞀郚であるなど既に知られおいるオブゞェクトの研究に぀いお正しい仮定を立おたす。 これに぀いおは、以䞋で詳しく説明したす。 ラファ゚ルは、このような「コンテキスト」の決定は、より䞀般的なアむデアを瀺すこずによっお、たたは以前に存圚した「ゞャスト」アプロヌチの代わりにプログラムの異なるより堅牢なビュヌを瀺すこずによっおプログラムできるこずを明確に瀺したした。 したがっお、プログラムに぀いお掚論するための最良の方法のいく぀かを説明しようずしたす。



1埓うべき指瀺のシヌケンスずしおのプログラム。


最も䞀般的で単玔な芳点コンピュヌタヌプログラムは、特定のデヌタに基づいお実行される䞀連の明確な操䜜です。 簡単なプログラム䟋を芋おみたしょう。Xが入力情報ずしお䞎えられた数倀であるず仮定したす。



 START: SET R = 1 LOOP: SET S = X/R SET T=R+S SET R = T/2 SET U = R x R SET V = X - U IF |V| > .001, GO TO LOOP ELSE PRINT V
      
      





Isaac Newtonに起因するこのプログラムは、Xの平方根のおおよその倀を蚈算したす。プログラムの各行では、珟圚の状況ず次に来るものが完党に明確です。 もちろん、そのような状況のシヌケンスがRの蚱容倀ずすべおの蚈算の終わりにすぐに぀ながるこずを蚌明するために、数孊的分析が必芁です。 したがっお、これらの刀断を䞀連の手順ず芋なしおも害はありたせん。 「GO TO」コマンドは、「メむンルヌプ」のいく぀かのコピヌの非垞に短いバヌゞョンず考えるこずができたす。 もちろん、分析が完了するたで、プログラムは有甚であるが理解できないアむデアの衚珟ず芋なすこずができたす。



2裁刀所ずしおのプログラム


ラファ゚ルのプログラムでは、「持っおいる」ずいう蚀葉が「所有しおいる」か「䞀郚ずしお持っおいる」かを刀断する必芁がありたす。



  ゞョン-男
 私は理解しおいたす
 ディック-男
 私は理解しおいたす
 チェヌン-バむクの䞀郚
 私は理解しおいたす
 チェヌン゜ヌにはチェヌンがありたす
 この刀決は抂念的なものですが、私はHASを意味したす䞀郚ずしお
 私は理解しおいたす
 ゞョンにはチェヌンがある 
 私は理解しおいたす
 ディックには怅子がある
 この刀決は抂念的なものですが、私はHASを意味したす䞀郚ずしお
 時蚈時蚈にはチェヌンがありたす
 このオファヌは䞍確かです。改革しおください 


タスクは、衚明されるずすぐに、プログラムのその郚分に転送されたす。この郚分では、以前に行われたすべおのレビュヌを実行できたす。 このようなサブルヌチンは、次のこずに基づいお決定を行いたす。

  1. yは他のオブゞェクトの䞀郚ずしお知られおいたすか たたは、䜕かの䞀郚であるグルヌプのメンバヌですか
  2. uは誰かに属しおいる、たたは誰かに属しおいるグルヌプのメンバヌであるこずがわかっおいたすか
  3. 条項1たたは2のいずれかが正しい堎合、適切な遞択を行いたす。 適切なオプションがない堎合は、停止しお詳现情報を収集したす。 䞡方の蚘述が真である堎合、パラグラフ4のオプションを怜蚎しおください。 したがっお、プログラムは、以前に取埗した情報が䞖界の「モデル」にどのように含たれおいたかの蚌拠を䜿甚したす。
  4. この点に到達するず、uはすでに䜕かの䞀郚であり、すでに誰かに属しおいるこずになりたす。 より正確なテストが必芁です。


U1ずU2を、それぞれ質問1ず2ぞの回答に存圚する「䜕か」たたは「䜕らかのシステム」ずしたす。 それらはyに䟝存したす。 質問xはU1ずU2のメンバヌたたはサブゞェクトですか どのオプションも適合しない堎合は、停止したす。 オプションの1぀が正しい堎合、察応する結果、「part」たたは「belongs」を遞択したす。 䞡方のオプションが正しい堎合、停止しお詳现情報を収集したす。 ラファ゚ルは蚀う



「これらの基準は非垞に単玔ですが、プログラムが曖昧な単語を含むさたざたな文の特定の目的のためにかなり合理的な決定を䞋せるようにするのに十分です」。 もちろん、たずえば、䞊蚘のダむアログで「ゞョンはチェヌンを持っおいる」ずいう文の前にある「ディックはチェヌンを持っおいる」ずいう文の堎合、プログラムはミスを犯す可胜性がありたす。 しかし、人が同じような状況で新しい䞖界に出䌚うず、きっず同じような間違いをするでしょう。 事実は、文の説明に単語を蚘述するこずによっお文のあいたいさの問題を解決するこずが可胜であるこずです。これは、以前に䞎えられた明確な文を通しお自動的に䜜成できたす。


したがっお、プログラムは、以前に収集された情報を怜玢し、xずyがどのように接続されおいるか、およびそれらがたったく接続されおいるかどうかを芋぀けようずしたす。 プログラムのこの「郚分」は、䞀皮の小さな裁刀所ずしお、たたは蚌拠ず蚌蚀の収集ず分析ずしお認識できたす。 問題を解決するために以前に指定されたシヌケンスのフレヌムワヌク内で、単玔な方法で手順ずしおそれを認識するべきではありたせん。 むしろ、プログラムが矛盟たたはあいたいになったずきを告げるこずができる控蚎裁刀所です。 さお、必芁な堎合にそれぞれが他の人に助けを求めるこずができるような倚数のそのような船で倧きなプログラムを曞いおいるずき、プログラムを「シヌケンス」ず考えるこずはたったく無意味です。 プログラマ自身がそのような「アピヌル」を可胜にする「正圓な」原則を策定したずしおも、そのようなプロセスが盞互䜜甚を必芁ずするプログラムの過皋でい぀どこで完党に理解できないかもしれたせん。 個々の「裁刀所」に぀いおは、圌はそのような盞互䜜甚に぀ながる可胜性のある状況に぀いお断片的な考えしか持っおいたせん。 芁するに、初心者レベルを完了したプログラマヌは、「䞀連の呜什」を曞くだけではありたせん。 圌らは、小さなグルヌプたたはプロセスからの個々のケヌスに぀いお曞いおいたす。 しかし、その盞互䜜甚のすべおの詳现を事前に完党に想像できるこずはめったにありたせん。 結局、コンピュヌタヌはたさにこれが目的です。



3ヒント集ずしおのプログラム


おびえた人文科孊だけでなく、ほずんどのコンピュヌタヌ「専門家」によっお共有されおいる誀解がありたす;それは、プログラミングが本質的にフォヌムずコンテンツの間の基本的な混乱に基づく機胜の正確で明確な環境であるず蚀いたす。 詩人に14行のスタンザを曞くタスクが䞎えられた堎合、これはプロセスをより正確にしたものではなかったでしょう。 䜜曲家がスケヌルの12ステップすべおを䜿甚する堎合、これはフォヌム党䜓を制限したせん。 蚭蚈者が4次のサヌフェスのみを䜿甚する必芁がある堎合、誰も気付かないでしょう したがっお、叀いプログラミング蚀語の厳密な文法がプロセスの蚘述の正確さに貢献するような論争でそのような䞀臎を芳察するこずは、単にばかげおいたす。 実際、プログラムがたったく機胜するためには、コンピュヌタの文法構文のルヌルを非垞に泚意深く守る必芁がありたす。 スペルミスや句読点の゚ラヌは蚱可されおいたせん しかし、これがあなたのプログラムが䜕をするかを明確に理解するのに圹立぀ず蚀うのは間違っおいたす。 FORTRAN蚀語では、プログラムが既に蚘述されたプロセスを参照するようにしたい堎合、「GO TO」固定コマンドのいずれかを䜿甚する必芁がありたす。 「䜿甚」「䜿甚」や「GET TO」「PROCEED ON TO」などずは蚀えたせん。 この堎合の構文は非垞に厳密です。 しかし、ほずんど䜕でも「GO」できるので、コンテンツは無料のたたです。



そのような厳しさはコンピュヌタヌによるものであるず仮定するのはさらに間違っおいたす 蚀語を定矩したプログラマヌによるものです BobrovのSTUDENTプログラムでは、必芁に応じお「USE「USE」を垞に入力「GO TO」ず入力し、単玔な状況では「GO」の代わりに「USE」を䜿甚できたす。 もちろん、これは柔軟性の単玔な䟋ですが、ほずんどの人が受け入れないのはたさにこの考えです。FORTRAN蚀語の厳密さず明確さは、もしあれば、厳密な偏芋によるものであり、事実の厳密さによるものではありたせん



モダンでより柔軟なシステムの䟋ずしお、Warren Teitelmanミシガン工科倧孊の博士論文、1966幎によっお開発されたPILOTプログラミング蚀語を取り䞊げたす。  倚くの堎合、「プログラム」ではなく「アドバむス」ず呌ぶこずができたす。 これらはケヌス間で蚘述され、通垞、デフォルトの状況に応じお、たたは以前のアドバむスの結果ずしお䜿甚されたす。 䟋は、 「宣教垫ず共食いに぀いお」ずいうよく知られおいる謎のような問題を解決するためのプログラムを開発するずきに導入された次の呜題です 。



, m – -1, c – -2 (- m) (- c ), . ( .)







このプログラムはヒュヌリスティックな怜玢であり、さたざたなパタヌンず動きを詊し、前進できるものを奜み、人々が川を枡るのを助けたす。 Teitelmanは最初に基本プログラムを䜜成したす。 しかし、宣教垫は食べられおおり、䞊蚘の「アドバむス」は、「前方ぞの動きを枬定するプログラムの䞀郚を倉曎しお動きを拒吊し、その埌、䞍平等な数の宣教垫ず人食い人が川のほずりに残る」こずを掚奚しおいたす。 タむテルマンによるず

プロモヌションでは、同時に「食べる」ずいう条件が䜜成されたす。 すべおの人食い人が1぀の銀行にあり、宣教垫が他の銀行にいるずき、圌らは3察0の比率で宣教垫の数を超えおいるので、数えお比范するだけでは十分ではありたせん。


ただし、構文䞊の制限を枛らすこずは重芁ではありたせん。 ポむントは、プログラムに加えられた倉曎の「助蚀」の性質にありたす。 「前進」に぀いおの刀断は、この「前進」がどのように実行され、正確に「プログラム」のどこに䜍眮するかを知らなくおも行うこずができたす。 状況は別のアドバむスの圱響で倉化する可胜性があり、新しいアドバむスがい぀䜿甚されるのか、圌らが単にそれに泚意を払わないのか想像さえできないかもしれたせん。 アドバむスの圱響䞋で、完党に異なる機胜が倉化する可胜性があり、状況によっおは「進行」がたったくなく、いずれにせよ誰かが食べられる可胜性がありたす。 これが発生した堎合、その理由を理解する必芁がありたす。



(1) «» (2) - , , , . , . , . , , , .



. , , . , , . , . (, , , !) « , ». .





, , , , . , , :



, , .



. -, , . (). , . , . : - , . , - .



. - . , . , , , «» «» .. , .



: ? , , – ! , , . - . , . . , – . , , . . , , . , .



All Articles