60

この質問のアイデアは、その人が話していることを理解していない、他の人が私を理解していないなど、さまざまな状況から得たものです。

したがって、「賢い」解決策は、コンピューター言語を話すことです。:)

プログラミング言語が (英語の) 自然言語にどこまで近づくことができるかに興味があります。私が近いと言うとき、私は言葉や文を使うだけでなく、自然言語が「できる」ことを「できる」ことを意味し、「できる」とは、それが(非常に限られた方法で)使用できることを意味します自然言語の代わりとして。

私はこれが不可能であることを知っています(そうですか?)が、これは面白いと思います。

4

33 に答える 33

119

Informと呼ばれるプログラミング言語があり、その最新の化身であるInform 7は、自然言語、特に書記言語によく似ています。

Informは、特にテキストアドベンチャーゲームを作成するためのものですが、概念を他の領域に拡張できなかったという固有の理由はありません。

これは、ゲームGlassからEmilyShortによって取得されたInform7コードの小さなスニペットです。

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." 

完全なコードはここにあります。

これは小さな単純な例です...実際には驚くほど堅牢なアイデアのセットを処理できます。

コードは、構造が隠された意味を持っている実際には奇妙な暗号ではないことを指摘しておく必要があります...このコードは、多かれ少なかれあなたが期待することを行います。例えば:

The old lady is a woman in the Stage. Understand "mother" or 
"stepmother" as the old lady. 

たまたま女性であるオブジェクトを作成し、そのオブジェクトに「老婦人」という名前を付け、そのオブジェクトを「ステージ」と呼ばれる部屋のオブジェクト内に配置します。次に、2つのエイリアス(「mother」と「stepmother」が作成され、どちらも「oldlady」オブジェクトを参照します。

もちろん、例がますます複雑になるにつれて、ジャンプするために必要なフープもより複雑になります。英語はその性質上、あいまいですが、コンピュータコードは最も明確ではありません。ですから、「完璧な結婚」は決して得られません。

于 2009-01-29T16:35:32.350 に答える
44

ロールインするサークルによって異なりますが、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はかなり自然言語です。プログラマー以外のタイプは簡単に習得できるため、構文は非常に理解しやすいものでなければなりません。

于 2009-01-29T15:14:55.150 に答える
32

リチャード・プライヤーがスーパーマンIIIで数百万ドルを送金するために使用した言語は、非常に近いものでした。

> TRANSFER $1,000,000 DOLLARS TO WEBSTER'S ACCOUNT.... NOW

;-)

編集:修正された文字;-)

于 2009-01-29T15:18:39.853 に答える
20

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.

ソース

于 2009-01-29T15:17:17.797 に答える
20

Lisp(もちろん(私が何を意味するか知っているなら(LOL)))

于 2009-01-29T16:50:39.403 に答える
18

良い' olAppleScriptは、その強みの1つとして英語に似ていると宣伝しています。ただし、一緒に作業するのはあまり楽しいことではありません。

于 2009-01-29T15:19:23.580 に答える
17

あなたが愛好家なら、シェイクスピアのプログラミング言語はかなり自然です;)

ただし、プログラミングで「自然」にできることには限界があります。人間の言語は解釈に対してあまりにもオープンです。プログラミング言語は具体的かつ正確である必要があります。それは「自然な」プログラミング言語を持つこととうまくかみ合わないと思います。

于 2009-01-29T15:23:34.150 に答える
15

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

ウィキペディアのハイパートーク

于 2009-01-29T15:36:59.660 に答える
8

VB.NET が英語に近いとまで言えるかどうかはわかりませんが、英語に近いと思います。確かに、しばらくプログラミングすると、英語のように思えます。ベテランの VB プログラマーにとって本のように読めますが、立ち止まって実際の英語について考えてみると、次のようになります。

For i As Integer = 1 To 10
  Console.WriteLine("Hello World")
Next

遠く離れています:

「Hello World」と書き、コンソールの次の行に 10 回移動します。

もちろん、英語はあいまいです。すべてを 10 回実行する必要があるのでしょうか。それとも、「Hello World」を 1 回だけ書いてから、次の行に 10 回移動する必要があるのでしょうか。

あいまいさの少ない方法で話すことを学ぶ必要があると思います。

これを 10 回繰り返します。コンソールに「Hello World」と書き、次の行に移動します。

しかし、本当に英語のように読めるプログラミング言語があるとは思えません。自然言語のようなものだと言う COBOL 狂信者でさえ、プログラミング言語で定義された方法ではなく、実際の方法で物事を考える方法を立ち止まって考えれば、実際にはそうではありません。

VBでさえ、フレームワークがあなたのやり方を指示する方法に制限されています...

于 2009-01-29T15:38:37.473 に答える
7

もちろん、平易な英語です!

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.

私は実際にこれを使用していません-私はここでそれを見つけました。

于 2009-01-29T16:47:15.010 に答える
7

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
于 2009-01-29T17:10:52.997 に答える
7

gherkinは、実行可能な bdd仕様を記述するためのドメイン固有言語です。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  |
于 2011-01-19T10:51:49.587 に答える
5

そうですね、RubyとPythonはかなり近いはずです。Rubyは、実際の生活をシミュレートする特別なキーワードを追加することさえします。untilキーワードなど。

もちろん、これら2つの言語のいずれかで実際のコードを入力すると、自然言語とは異なりますが、それではどうでしょうか。

于 2009-01-29T15:16:33.307 に答える
5

SQLまたはCOBOLと言います。

于 2009-01-29T15:18:22.443 に答える
4

VB.NETの構文は英語に非常に近いです

于 2009-01-29T15:17:31.400 に答える
4

Forthは逆ポーランドベースであり、一部の人にとっては自然に機能します。

「早く学びましょう」-ヨーダ。

于 2009-01-29T18:29:03.777 に答える
3

自然言語は曖昧であり、理解するには文字通りの線形の読みよりも少し多くかかります。しかし、それが認められると、VB.NETはいくつかの構成で近づいています。私が見た中で最も近い。

VB.NETのForループ

For i = 0 To 2
  'loop time!
Next i

これは、冗長になりすぎずに見たのと同じくらい「自然」です。

于 2009-01-29T15:15:29.253 に答える
3

それは「疑似コード」と呼ばれます。コードの意図を伝えるために必要なあらゆる手段を使用します (作成したか、後で作成する予定です)。

どのプログラミング言語にも、部外者にはあいまいな機能がいくつかあります。

于 2009-01-29T15:20:30.427 に答える
3

あなたが求めたものとは正確には異なりますが、あなたが望むことを達成する言語がありますが、別の方向からです。 たとえば、ロジバンは自然言語として使用するために作られた言語ですが、あいまいさはありません。

ロジバン ([loʒban] と発音) は、述語論理に基づいて構築された、構文的に明確な人間の言語です。

于 2010-01-14T05:41:24.657 に答える
2

Applescriptは自然言語のように見えます。

于 2009-01-29T15:19:10.727 に答える
2

ウィリアムシェイクスピアは世界最高のプログラマーだったと思います...

シェイクスピアプログラミング言語

于 2009-01-29T16:51:19.823 に答える
2

あなたの質問は誤謬に基づいていると思います。プログラミングは、主に人間からコンピューター言語への翻訳ではありません。技術的な問題を理解し、難しいプログラムを設計することです。コードの入力はマイナーな部分です。プログラミング言語を学ぶことは、記譜法を学ぶことで作曲家になる以上に、誰かをプログラマーにすることはありません。

とは言うものの、ほぼすべての言語で十分に高いレベルで記述し、構文の説明に数分を費やすと、コードの要点を専用の非プログラマーに伝えることができます。逆に、十分に正確な自然言語仕様は、高レベルの関数に変換できる場合があります(ただし、そのような仕様を作成するために努力することはめったにありません)。

于 2010-01-14T06:35:45.880 に答える
1

COBOLは、自然言語(この場合は英語)のようになるという特定の目的で作成されました。

于 2009-01-29T15:17:18.513 に答える
1

Ruby と Oslo (およびおそらく F#) を使用すると、非常に言語に適した DSL を構築できます。それが少なくともオスロの約束です。BDD のオスロ文法の例は、ここにあります

于 2009-01-29T15:39:50.513 に答える
1

サンスクリット語はあなたが説明するものに近づきます。冗長性はなく、現代のすべてのプログラムの基礎である BNF に準拠した最初の言語でした。言語文法、およびそれは英語と共通のインドヨーロッパ系を共有しています

于 2009-03-08T17:13:30.720 に答える
0

Cobolは英語に近いです

ロゴも英語からそれほど遠くないと思います

于 2009-01-29T15:18:52.333 に答える
0

エッフェルのことを考えました。ここから引用:

EiffelSoftwareのリードソフトウェアエンジニアであるRaphaelSimon氏は、この言語は自然言語を使用してプログラムを作成できるように設計されていると述べました。

たとえば、99本のビールプログラムを参照してください。

それが「最も」自然だとは言えませんが、かなり自然だと思います。

于 2010-01-23T11:20:02.067 に答える
0

私にとって、それはPythonです。

YMMV

于 2010-08-05T17:34:14.583 に答える
0

CO mmon Business Oriented Language英語ように読めて、誰もが、プログラマーでなくても理解できるようになればいいのにと思います。(ここから盗む

于 2009-01-29T15:22:37.723 に答える
0

私たちが通常「疑似コード」と呼んでいるものは、非常にPascalに近いものです。それはおそらく自然な英語に特に近いわけではありませんが、ほとんどの言語よりも単純でなければ、疑似コードをまったく書きません (コードを書くだけです)。

于 2009-01-29T16:05:30.337 に答える
-1

Luaを提案します。サンプルコード:

function modulus(num, mod)
    return num % mod
end
for i = 1, 1000 do
    local done = false
    if modulus(i, 3) == 0 then
        print("Fizz")
    else if modulus(i, 5) == 0 then
        done = true
        print("Buzz")
    end
    if modulus(i, 5) == 0 and not done then
        print("Buzz")
    end
    print(" ")
end

最も英語に似ているわけではありませんが、私が自分でそう言ったとしても、かなり読みやすいです!

于 2009-08-29T03:12:46.667 に答える
-2

もちろん、概念を生成してからこれらの概念に「名前を付ける」機能も必要になるため、これらを使用してより複雑な構成を表現できます。つまり、基本的に、世界のオントロジーを何らかの形でサポートする必要があります。以前の投稿で説明されている「通知」言語のようなものを、バックエンドの概念ネットワークまたはオントロジーデータベースと組み合わせて使用​​するのが良い方法だと思います。

于 2011-01-19T10:08:36.373 に答える
-3

自然言語は、一貫性のない文法で有名です。自然言語の中で最も一貫性のある文法はサンスクリット語です。実際、この言語の構造は非常にしっかりしているため、発音に基づいた優れた検索エンジンを持つことができました。悲しいかな、この言語は多かれ少なかれ死んでいます。

于 2010-02-09T10:17:02.320 に答える