この質問のアイデアは、その人が話していることを理解していない、他の人が私を理解していない、さまざまな状況から得ました。
したがって、「スマート」な解決策は、コンピューター言語を話すことです。 :)
私は、プログラミング言語が(英語)自然言語にどれだけ近づくことができるかに興味があります。近くで言うときは、言葉や文を使用するだけでなく、自然言語が「できる」ことを「実行」できるようにすることを意味し、「実行する」とは、(非常に限られた方法で)使用できることを意味します自然言語の代わりとして。
これが不可能であることは知っていますが(そうでしょうか?)、これは興味深いことだと思います。
Informと呼ばれるプログラミング言語があり、その最新の化身であるInform 7はlotのように自然言語のように見えます...特に、書かれた言語。
Informはテキストアドベンチャーゲームを作成するためのものですが、その概念を他の領域に拡張できないという固有の理由はありません。
以下は、Emily Shortによる、ゲームGlassから取ったInform 7コードの小さなスニペットです。
Stage is a room.
The old lady is a woman in the Stage. Understand "mother" or
"stepmother" as the old lady. The old lady is active. The description
of the lady is "She looks plucked: thin neck with folds of skin
exposed, nose beaky, lips white. Perhaps when her fortunes are mended
her cosmetics too will improve."
The Prince is a man in the Stage. The description of the prince is
"He's tolerably attractive, in his flightless way. It's hard not to
pity him a little." The prince carries a glass slipper. The glass
slipper is wearable. Understand "shoe" or "heel" or "toe" or "foot"
as the slipper. The description of the slipper is "It is very small
for an adult woman's foot."
完全なコードは here にあります。
これは小さな単純な例です...実際、驚くほど強力な一連のアイデアを処理できます。
このコードは、構成が隠された意味を持つ実際には奇妙な暗号ではないことを指摘しておく必要があります。このコードは、多かれ少なかれ期待どおりに動作します。例えば:
The old lady is a woman in the Stage. Understand "mother" or
"stepmother" as the old lady.
たまたま女性のオブジェクトを作成し、そのオブジェクトに「老婦人」という名前を付け、そのオブジェクトを「ステージ」と呼ばれる部屋オブジェクト内に配置します。次に、2つのエイリアス(「mother」と「stepmother」が作成され、どちらも「old lady」オブジェクトを参照します。
もちろん、例がますます複雑になるにつれて、ジャンプするために必要なフープもより複雑になります。英語は、その性質上、あいまいですが、コンピューターコードは明確にそうではありません。したがって、「完全な結婚」は決して得られません。
ロールするサークルによって異なりますが、 [〜#〜] lolcode [〜#〜] は自然言語のように考えることができます;)
ループの例:
HAI
CAN HAS STDIO?
I HAS A VAR
IM IN YR LOOP
UP VAR!!1
VISIBLE VAR
IZ VAR BIGGER THAN 10? KTHXBYE
IM OUTTA YR LOOP
KTHXBYE
真面目な注意として、VBはかなり自然な言語です。プログラマーではないタイプでも簡単に学習できるため、構文は非常に理解しやすくなければなりません。
スーパーマンIIIで数百万ドルを送金するために使用されたリチャードプライアーの言葉は非常に近いものでした。
> TRANSFER $1,000,000 DOLLARS TO WEBSTER'S ACCOUNT.... NOW
;-)
編集:文字が修正されました;-)
COBOLは英語によく似ています
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. HELLOWORLD.
000300
000400*
000500 ENVIRONMENT DIVISION.
000600 CONFIGURATION SECTION.
000700 SOURCE-COMPUTER. RM-COBOL.
000800 OBJECT-COMPUTER. RM-COBOL.
000900
001000 DATA DIVISION.
001100 FILE SECTION.
001200
100000 PROCEDURE DIVISION.
100100
100200 MAIN-LOGIC SECTION.
100300 BEGIN.
100400 DISPLAY " " LINE 1 POSITION 1 ERASE EOS.
100500 DISPLAY "Hello world!" LINE 15 POSITION 10.
100600 STOP RUN.
100700 MAIN-LOGIC-EXIT.
100800 EXIT.
LISP(もちろん(もし私が何を意味するのか知っていれば(LOL)))
あなたが愛好家なら、 シェークスピアプログラミング言語 はかなり自然です;)
ただし、プログラミングで取得できる「自然な」方法には制限があります。人間の言語は解釈に対してあまりにもオープンです-プログラミング言語は具体的かつ正確である必要があります。私はそれが「自然な」プログラミング言語を持つこととうまく調和しないと思います。
Good 'ol AppleScript は、長所の1つとして英語に似ていることを宣伝しています。ただし、作業するのはそれほど楽しくありません。
HyperTalk-AppleのHyperCardの背後にある言語。
on mouseUp
put "100,100" into pos
repeat with x = 1 to the number of card buttons
set the location of card button x to pos
add 15 to item 1 of pos
end repeat
end mouseUp
VB.NETが英語に近いとまでは言えないかもしれませんが、あなたと同じくらい近いと思いますreally get。確かに、しばらくプログラムすると、英語のように見えますする熟練したプログラマーには本のように読みますVBプログラマーですが、実世界の英語について考えてみましょう。
For i As Integer = 1 To 10
Console.WriteLine("Hello World")
Next
長い道のりです:
「Hello World」と書いて、コンソールの次の行に10回移動します。
もちろん、英語は曖昧です-それはあなたが全部を10回行うことを望みますか、それとも単に「Hello World」を一度書いて、それから次の行に10回移動することを望みますか?
曖昧さの少ない方法で話すことを学ぶ必要があると思います:
これを10回行います。コンソールで「Hello World」と書いて、次の行に移動します。
しかし、私は本当にが英語のように読めるプログラミング言語が存在することを非常に疑っています。自然言語のようなものだと言っているCobol狂信者でさえ、プログラミング言語で定義された方法ではなく、realの方法で物事についてどう考えるかを考えて考えるのは、実際にはそうではありません。
VBでも、フレームワークが実行する方法に制限されています...
ええと、もちろん 平易な英語 、もちろん!
To sing the beer song:
Put 99 into a number.
Loop.
If the number is 0, break.
Format a string given the number and "bottle" and "bottles".
Write the string then " of beer on the wall, " then the string then " of beer.".
Format another string given the number minus 1 and "bottle" and "bottles".
Write "Take one down and pass it around, " then the other string then " of beer on the wall.".
Skip a line.
Subtract 1 from the number.
Repeat.
Write "No more bottles of beer on the wall, no more bottles of beer.".
Write "Go to the store and buy some more, 99 bottles of beer on the wall.".
To format a string given a number and a singular string and a plural string:
If the number is 0, put "no more " then the plural into the string; exit.
If the number is 1, put "1 " then the singular into the string; exit.
Put the number then " " then the plural into the string.
私は実際にはこれを使用していません-私はそれを見つけました here 。
gherkinは、実行可能ファイル bdd -specificationsを記述するドメイン固有の言語です。 cucumber (Ruby)および specflow (dotnet)で使用されます。
例
Feature: Browsing
In order to see who's been on the site
As a user
I want to be able to view the list of posts
Scenario: Navigation to homepage
When I navigate to /Guestbook
Then I should be on the guestbook page
Scenario: Viewing existing entries
Given I am on the guestbook page
Then I should see a list of guestbook entries
And guestbook entries have an author
And guestbook entries have a posted date
And guestbook entries have a comment
Scenario: Most recent entries are displayed first
Given we have the following existing entries
| Name | Comment | Posted date |
| Mr. A | I like A | 2008-10-01 09:20 |
| Mrs. B | I like B | 2010-03-05 02:15 |
| Dr. C | I like C | 2010-02-20 12:21 |
And I am on the guestbook page
Then the guestbook entries includes the following, in this order
| Name | Comment | Posted date |
| Mrs. B | I like B | 2010-03-05 02:15 |
| Dr. C | I like C | 2010-02-20 12:21 |
| Mr. A | I like A | 2008-10-01 09:20 |
Perlには、人間が自然言語を処理する方法に基づいたいくつかの設計原則があります( http://www.wall.org/~larry/natural.html を参照)。
これは、コードを英語や他の言語の文のように読み取る構文ハックとは異なります。それらが有用であると私は完全には確信していません。類推として、ASCIIアートをコードで作成することもできますが、私の言語が視覚的構成の原則に基づいているという意味ではありません。
それが役に立たない場合の例を示すために、これがルビッシュ/小話言語でのように見えると仮定します:
3.times say "hello!"
それはいいですね。コードが少し読みやすくなり、話すことができるオウムを持っているのと同じような楽しみがありますが、コンピュータ言語の基本的なルールを知っている場合にのみ役立ちます。それがたまたま英語のように見えるという事実は、私に余計な力や洞察を与えません。次のような文を生成するために、脳の英語の文法処理エンジンを使用できません。
// The dot looks like misplaced punctuation
// in the "English" above, but it's essential in
// the computer language
3 times say "hello!" // syntax error
// In a natural language, a reordering might make
// sense, but it's impossible here because the Word
// order was essential to carrying the parameters
// to the method invocation in the right order.
say "hello" 3 times // syntax error
まあ、RubyとPythonはかなり近いはずです。Rubyは、現実の生活をシミュレートします。
もちろん、2つの言語のいずれかで実際のコードを入力すると、実際には自然言語とは異なりますが、それでも何ですか?
SQLまたはCOBOLと言います。
Forthはリバースポリッシュベースで、一部の人にとっては自然に機能します。
「早くフォースを学ぶ」-ヨーダ。
vB.NETの構文は英語に非常に近い
正確にはあなたが求めたものではありませんが、あなたが望んでいることを達成する言語がありますしかし、他の方向からですロジバン 、たとえば、自然言語として使用するために作成された言語ですが、あいまいさはありません。
ロジバン([ˈloʒban]と発音します)は、述語論理に基づいて構成された、構文的に明確な人間の言語です。
まあ自然言語は曖昧であり、理解するために文字通りの線形の読みよりも少し多くかかります。しかし、それが認められて、VB.NETはいくつかの構成要素で接近しています。私が見た中で最も近い。
VB.NETのループ
For i = 0 To 2
'loop time!
Next i
それは私が今まで見たのと同じくらい冗長ではなく「自然」なのだ。
これは「疑似コード」と呼ばれます。コードの意図を伝えるために必要な手段を使用します(作成した、または後で作成します)。
どのプログラミング言語にも、部外者にはあいまいないくつかの機能があります。
ウィリアム・シェイクスピアは世界最高のプログラマーだったと思います...
Applescriptは自然言語のように見えます。
あなたの質問は誤りに基づいていると思います。プログラミングは主に人間からコンピュータ言語への翻訳に関するものではありません。技術的な問題を理解し、プログラムを設計することは難しいので、コードを入力することは重要ではありません。プログラミング言語を学ぶことは、楽譜を学ぶことで作曲家になること以上に、誰かをプログラマーにすることにはなりません。
とはいえ、ほとんどすべての言語で十分に高いレベルで記述し、構文の説明に数分を費やす場合、コードの要点を専用の非プログラマーに伝えることができます。逆に、十分に正確な自然言語仕様は、高レベルの関数に変換できる場合があります(そのような仕様を作成する努力を惜しむことはほとんどありませんが)。
サンスクリット語はあなたが説明するものに近づきます。冗長性はなく、すべての現代のprogの基礎であるBNFに続く最初の言語でした。言語文法、そしてそれは英語と共通のインドヨーロッパ系を共有します
RubyとOslo(そしておそらくF#)を使用すると、非常に言語に優しいDSLを構築できます。これは、少なくともOsloの約束です。BDDのOslo文法の例を見つけることができます- ここ 。
COBOLは、自然言語(この場合は英語)のような特定の目的で作成されました
私たちが通常「疑似コード」と呼ぶのは Pascal に非常に近いものです。それはおそらくそれを自然な英語に特に近づけないでしょうが、それがほとんどの言語より簡単でなければ、疑似コードをまったく書かないでしょう(コードを書くだけです)。
Cobolは英語に近づいています
ロゴも英語からそれほど遠くないと思います
[〜#〜] co [〜#〜]mmon[〜#〜] bがあったらいいのに[〜#〜]usiness[〜#〜] o [〜#〜]riented[〜#〜] l [〜#〜]英語のように読める言語なので、誰でも、プログラマー以外でも理解できます...たぶん、作成する必要があります! ( ここから盗まれます )