54

つまり、人間のスタイルのコーディングを備えたコード化された言語はありますか? 例えば:

Create an object called MyVar and initialize it to 10;
Take MyVar and call MyMethod() with parameters. . .

あまり役に立たないことはわかっていますが、そのような文法を作成するのは興味深いことです。

4

51 に答える 51

123

ロルコードはいかがですか?

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

シンプルそのもの!

于 2008-10-14T20:59:58.080 に答える
104

COBOLはそのようなものです。

SET MYVAR TO 10.
EXECUTE MYMETHOD with 10, MYVAR.

ウィキペディアからの別のサンプル:

ADD YEARS TO AGE.
MULTIPLY PRICE BY QUANTITY GIVING COST.
SUBTRACT DISCOUNT FROM COST GIVING FINAL-COST.

奇妙なことに、英語として読めるように設計されているにもかかわらず、ほとんどのプログラマーは奇妙な命名規則でこれを完全に台無しにしました。

SET VAR_00_MYVAR_PIC99 TO 10.
EXECUTE PROC_10_MYMETHOD with 10, VAR_00_MYVAR_PIC99.
于 2008-10-14T20:54:15.580 に答える
97

通知7

Inform 7は、おそらく人間の言語で最も適切に設計されていると私が感じる言語です。アドベンチャーゲームを書くためのアプリケーション固有のものです。

これはルールベースのセマンティクスに基づいており、オブジェクトとその場所の関係を説明する多くのルールを記述します。たとえば、以下のセクションはInform7プログラムです。

"Hello Deductible" by "I.F. Author"

The story headline is "An Interactive Example".

The Living Room is a room. "A comfortably furnished living room."
The Kitchen is north of the Living Room.
The Front Door is south of the Living Room.
The Front Door is a door. The Front Door is closed and locked.

The insurance salesman is a man in the Living Room. The description is "An insurance salesman in a tacky polyester suit. He seems eager to speak to you." Understand "man" as the insurance salesman.

A briefcase is carried by the insurance salesman. The description is "A slightly worn, black briefcase."  Understand "case" as the briefcase.

The insurance paperwork is in the briefcase. The description is "Page after page of small legalese." Understand "papers" or "documents" or "forms" as the paperwork.

Instead of listening to the insurance salesman: 
    say "The salesman bores you with a discussion of life  insurance policies.  From his briefcase he pulls some paperwork which he hands to you.";
    move the insurance paperwork to the player.

ウィキペディアから引用した例

于 2008-10-14T21:38:31.513 に答える
42

明らかにプラットフォームに依存しますが、AppleScript はそれにかなり近いです。

iTunesを開いてプレイリストを再生するスクリプトは次のとおりです

tell application "iTunes"
    activate
    play playlist "Party Shuffle"
end tell

ソース: AppleScript の例

于 2008-10-14T20:53:44.270 に答える
32

これは 1980 年代初頭頃の「次の大物」であり、私は最初の 2 年間のほとんどを「NATURAL」で作業する AA コーダーとして過ごしました。データ アクセス(この場合は ADABAS データベースへのアクセス)を人間が判読できるように設計されています。

もちろん、それはまったく何もしませんでした。最終的に得られたのは、冗長で構造の悪いコードだけでした。これらの製品は両方ともまだ出回っていますが、聞いたことがないということは、それが行き止まりであったことを証明しています.

実際、当時は、「プログラミング」を超えて、2001 年にインスパイアされた AI の天国に移行したいという一般的な欲求があったようです。オラクルはコード生成に非常に熱心で、「最後の製品」と呼ばれる製品が管理者向けに販売されていたことを覚えています。この製品は、必要なプログラムを自動的に生成し、すべてのプログラミング スタッフを冗長化する製品として販売されていました。期待に応えられなかったようです;-)

SQL はもともと、管理者がデータを直接クエリできるようにする方法として、一部の四半期で販売されていたことを覚えておく価値があります。私は、基本的なクエリ ツールを手に入れる計画があったため、下級管理職が含まれていた基本的な SQL を学習するコースに送られました (鉄道で運営されていた大規模な全国運輸組織 - 鋼鉄の種類)。それは何という惨事でした。

たぶん50年後には違うかもしれませんが、現在のプレイコーディングの段階では、明確で曖昧な自然言語への近似ではなく、それらの目的のために設計された専用の構文を介して最適に仲介される、ある程度の明確な思考と実装が必要です。 . 最も近い近似はおそらく物理学であり、主題の本質は、冗長な言葉遣いではなく、使用される数学 (物理学のプログラミング言語を考えてください) にあります。

追加した

私が忘れていたのは、COBOL とは別に PL/1 もあり、NASA が人を月に送ることを可能にしたと信じられていた PL/1 は、COBOL と同じくらい冗長で、「管理者が読める」ようにさらに努力しました。そのため、今では誰も実際に聞いたことがありません:-)

于 2008-10-14T21:25:44.953 に答える
32

「自然言語」でのプログラミングを促進するプロジェクトは、本質的に失敗する運命にあります。

-- Edsger W.Dijkstra、人を傷つける可能性のある真実をどのように伝えますか?

于 2009-01-02T19:09:14.583 に答える
18

シェフ!誰でもレシピを読むことができますか?Hello worldを見よ!

Ingredients.
72 g haricot beans
101 eggs
108 g lard
111 cups oil
32 zucchinis
119 ml water
114 g red salmon
100 g dijon mustard
33 potatoes

Method.
Put potatoes into the mixing bowl. Put dijon mustard into the mixing bowl. 
Put lard into the mixing bowl. Put red salmon into the mixing bowl. Put oil into the mixing bowl. 
Put water into the mixing bowl. Put zucchinis into the mixing bowl. Put oil into the mixing bowl. 
Put lard into the mixing bowl. Put lard into the mixing bowl. Put eggs into the mixing bowl. 
Put haricot beans into the mixing bowl. Liquefy contents of the mixing bowl. 
Pour contents of the mixing bowl into the baking dish.

真面目な答えではない場合は申し訳ありませんが、これはすごいことです。:-)

于 2008-10-15T00:29:06.723 に答える
18

すべての言語は「人間が読める」ものです。:) 他にどのようにして作成できるでしょうか?そうは言っても、DSL をサポートする言語はBooのように非常に直感的です。

于 2008-10-14T21:12:21.830 に答える
15

プログラミング言語を (冗長な) 通常の言語のように読めるようにすることは、常に法律用語で会話することを人々に要求するようなものです。余分な言い回しはすべて邪魔になります。

理想的なプログラミング言語は、可能な限り透過的で、プログラムの背後にある概念を際立たせる構文を備えている必要があります。明らかに、学習曲線が速いことと、最小限だがあいまいな構文 (Perl や K を考えてみてください) を使用することとの間にはトレードオフがあります。

于 2008-10-14T21:04:01.363 に答える
13

ルールのセットを作成することにより、このようにPrologで論理プログラミングを行うことが可能です。特定のドメインの文法を作成(またはダウンロード)し、ナレッジベースを作成してからクエリを実行できます。文法を定義した後、次のようなことができます。

bob is a parent of tim.
mary is a parent of bob.

?- X is a grandparent of tim.
X = mary

?- jim is a parent of bob.
false
于 2008-10-14T21:07:30.497 に答える
13

Shakespeare プログラミング言語はまだ言及されていないようです。

これらのプログラムはシェイクスピア劇のようにコード化されており、劇中の個々のキャラクターは数字を保持できる変数であり、劇中のさまざまなフレーズはキャラクターとそれらが保持する数字を操作します。たとえば、「Speak your mind」は、キャラクターに自分の値を出力するように命令します。

于 2008-10-15T13:49:44.717 に答える
9

アップルスクリプト:

tell application "Finder"
 set the percent_free to ¬
 (((the free space of the startup disk) / (the capacity of the startup disk)) * 100) div 1
end tell
if the percent_free is less than 10 then
 tell application (path to frontmost application as text)
 display dialog "The startup disk has only " & the percent_free & ¬
 " percent of its capacity available." & return & return & ¬
 "Should this script continue?" with icon 1
 end tell
end if
于 2008-10-14T20:54:22.210 に答える
7

私はCを読むことができます。つまり、人間が読める形式です(私は人間だからです)。それは平均的な人にはあまりにも簡潔です。プログラミング言語の一般的な概念は、コンピューターが特定の行でどのように動作するかについての情報を最大化することです。

これがRubyがとても人気がある理由です。最小限のテキストで機能を最大化します。英語(または他の自然言語)は、かなり不正確で、情報量が少ない/文字の言語です。

要約すると、それは次のとおりです。(i)以前に行われ、(ii)既知の弱いアイデア。

于 2008-10-14T21:29:14.230 に答える
7

これは実際にホットなトピックです。

初心者向け - 人間が読めるものとは?

中国語を読む人はロシア語を読むことができず、その逆も同様です。たとえば、処方箋を書いている中国の薬剤師にドメインを絞り込む場合、その周りの言語を設計できます。そして、それは人間が読める形式になります。

そのような言語は、ドメイン固有言語の傘下に入ります。

于 2008-10-14T22:22:52.343 に答える
7

SQL

SELECT name, address FROM customers WHERE region = 'Europe'
于 2009-03-20T10:47:34.943 に答える
6

HyperTalkとその子孫であるAppleScriptは、英語に似るように設計されています。

于 2008-10-15T00:04:23.900 に答える
6

Inform 7は、私が見た中で最も成功したシステムです。ここの他の回答にリストされている粗雑なシステムよりも2つの利点があります。それは、自然言語(インタラクティブフィクション)に特に適したドメイン用であり、従来の方法だけでなく、より計算言語学の伝承に基づいて入力コードのより洗練された分析を行います。括弧などの代わりに英語の単語を使用するプログラミング言語の文法。

于 2008-10-14T21:43:48.757 に答える
6

はい。それはCOBOLと呼ばれ、人々は一般的にそれを嫌います。

于 2008-10-14T20:57:08.087 に答える
5

表現の明確さが重要です。

しかし、思考の明晰さははるかに重要です。

于 2008-10-14T21:38:07.317 に答える
5

Perl、と主張する人もいます。

print "hello!" and open my $File, '<', $path or die "Couldn't open the file after saying hello!";
于 2008-10-14T20:53:16.190 に答える
5

「自然言語プログラミング」を Google で検索すると、多くの情報が見つかります (これが悪い考えである理由など)。

于 2008-10-14T20:54:57.137 に答える
4

わかりました、Erlang。

-module(listsort).
-export([by_length/1]).

 by_length(Lists) ->
    F = fun(A,B) when is_list(A), is_list(B) ->
            length(A) < length(B)
        end,
    qsort(Lists, F).

 qsort([], _)-> [];
 qsort([Pivot|Rest], Smaller) ->
     qsort([ X || X <- Rest, Smaller(X,Pivot)], Smaller)
     ++ [Pivot] ++
     qsort([ Y ||Y <- Rest, not(Smaller(Y, Pivot))], Smaller).

私は人間であり、プログラミング言語であり、読むことができます。意味はわかりませんが、英語の単語がたくさん出てくると思います。

(頬にしっかりと舌を入れる。)

于 2008-10-15T15:02:13.870 に答える
4

VB は、私が考えることができる限り近いものです。

If MyLife.Sucks Then MyLife.End Else MyLife.Continue

于 2008-10-14T20:54:54.203 に答える
4

DSL は非常に自然に見えます。MGramarで作成されたこの例を参照してください。

test "Searching google for watin"
    goto "http://www.google.se"
    type "watin" into "q"
    click "btnG"
    assert that text "WatiN Home" exists
    assert that element "res" exists
end
于 2008-11-13T19:03:57.113 に答える
3

興味深い質問です。あなたの質問は「人間が読みやすいプログラミング言語はありますか?」、または「プログラミングに使用できる人間の言語はありますか?」と読むことができます。ここでの答えはすべて前者に焦点を当てているので、後者に答えてみましょう。

サンスクリット語について聞いたことがありますか?これは、ヒンディー語のような現代インドの言語が基づいている古代インドの言語です。

ウィキ/サンスクリット語

私は何年もの間、それがコンピュータの高級言語としてそのまま使用できるほど正確で完全であると聞いてきました。もちろん、サンスクリット語の命令を機械語に変換するにはコンパイラが必要です。私は台本を知っています。確かに、それは正確です(完全に音声なので、「どのように綴るのか」と尋ねる必要はありません)が、文法については十分にわかりません。

これは完全な逸話なので、私はこれの正確さを保証しません。これに関して私が知っていることを共有したかっただけです。:-)

于 2010-09-29T14:41:16.977 に答える
3

ほとんどの人よりも人間が読める形式であることは、Adaの初期のセールスポイントの1つでした。どんな言語でも十分に複雑なタスクは、理解するために有能な開業医を必要とするので、私は最近それをばかげた議論だと思います。ただし、C構文言語のベジーザスを打ち負かします。その支配的なコーディングスタイルは、この効果を高めることもできます。たとえば、ifステートメントのループを比較します。Ada:

if Time_To_Loop then
   for i in Some_Array loop
      Some_Array(i) := i;
   end loop;
end if;

C:

if (timeToLoop != 0) {
   for (int i=0;i<SOME_ARRAY_LENGTH;i++) {
      someArray[i] = i;
   }
}

Microsoftのようなハンガリアン記法を使用した場合、Cコードはさらに悪く見えますが、私はうまくやろうとしています。:-)

于 2008-11-13T19:36:19.373 に答える
3

COBOLは管理者が読むことを意図しており、読みやすくするために「ノイズワード」があります。

面白いのは、冗長な DSL のように読めることです。

于 2008-10-14T20:59:50.733 に答える
2

大学院生

「x を実行するプログラムを書いてください」という 1 つのステートメントしかありません。
これは、X のすべての値に対して有効であり、x を定義する必要がなく、プログラムの作成後に変更できるという利点があります。

intern と呼ばれる商用の方言が利用可能です。開発コストは低くなりますが、動作することは保証されていません

于 2010-07-20T02:46:15.690 に答える
2

ここでは一般的なコンセンサスに同意します。「人間が読める」汎用プログラミング言語はほとんど悪い考えですが、人間が読めるドメイン固有言語は非常に価値があります。

REBOL には DSL を作成する優れたシステムがあります。

于 2008-10-15T02:43:23.080 に答える
1

ABCが言及されているのを見たことがありません。ユトレヒト大学の1年目のコンピュータサイエンスでそれと協力し、常に非常に「人間が読める」と考えていました(それが正確に意味するものは何でも)。

ドキュメント内のすべての単語のセットを収集するための機能語の例を次に示します。

   HOW TO RETURN words document:
      PUT {} IN collection
      FOR line IN document:
         FOR word IN split line:
            IF word not.in collection:
               INSERT word IN collection
      RETURN collection
于 2009-03-31T13:37:03.247 に答える
1

面白い。「人間が読める新聞はありますか?」というアルファベットを想像してみてください。

何かを読む前に、まず読むことを学ばなければなりません。

于 2009-03-20T10:24:20.883 に答える
1

それ自体はプログラミング言語ではありませんが、倹約的な XML 短縮形言語 (PXSL)により、XSL は間違いなく既に存在しているよりもはるかに人間が判読できるようになります (そして冗長性も低くなります!)。

 <doc keywords="x y z">          doc -keywords=<<x y z>>
  <title/>                        title
  <body id="db13">                body -id=db13
    This is text.                   <<This is text.>>
  </body>
</doc>
于 2008-10-14T21:55:23.787 に答える
1

コボルはそんな感じでした。

于 2008-10-14T20:55:31.223 に答える
1

私見、人間の可読性はかなり主観的です。ただし、さらに詳しく知りたい場合は、次のトピックを検討することをお勧めします。

  • Python - 「特殊文字」よりも空白を優先します (構文の { & } など)。
  • Smalltalk - 引数をメソッド名に分散させることができます。
  • ルビー
  • 流暢な API / ドメイン固有言語
于 2008-10-14T21:02:24.797 に答える
1

Pythonを見たことがありますか?

于 2010-08-02T07:34:51.440 に答える
1

それは空白でなければなりません。単に読むものがない唯一のプログラミング言語:http://en.wikipedia.org/wiki/whitespace_(programming_language)

于 2008-11-13T19:21:38.700 に答える
1

この 2 つの構造には、まったく異なる目的があると思います。自然言語は、解釈の対象となる非常に緩い構造を持っており、それを理解するために高レベルの推論エンジンの存在を前提としています。プログラミング言語は、正確で明確な仕様であることを意図しており、解釈の余地はほとんどありません。

自然言語をプログラミング構造として使用することは、その可変性を調整し、その意味を明確にするという単純な問題であるべきだと思うかもしれません。しかし、それが完了すると、構文的にラップおよびパッケージ化されているかどうかに関係なく、プログラミング言語のセマンティクスが残ります。

于 2008-10-15T13:59:55.760 に答える
0

Windevは非常に簡単で、人間が読める言語です。 http://www.pcsoft.fr/windev/presentation.htm

于 2009-10-08T10:46:51.657 に答える
0

初期の頃、Microsoftは実際にWordBasicをGUI言語に一致するように翻訳しました(長年にわたってVisual Basic for Applicationsとして知られていました)。のような構成

If <condition> Then
  <something>
End If

オランダ語版のWordでは、次のように入力および表示されます。

Als <condition> Dan
  <something>
Einde Als

もちろん、理論的には、これにより、記録されたマクロを理解しやすくなりました。しかし、私はそれらの人々が最初にコードを見るだろうとは思わない...

于 2009-03-29T14:03:53.370 に答える
0

人間の言語と非常によく似た優れたDSL(ドメイン固有言語)がたくさんあります。

良い例はスターバックスです。このようなDSLを書くことができます。これはRubyを使用していますが、多くの異なる言語で実行できます。RubyまたはPythonの利点は、動的言語であるため、ダックタイピングを使用できることです。



venti = Starbucks.new(:kind => :coffee, :size => :venti)
half_foam_venti = add_half_foam(venti)
serve(half_foam_venti)


しかし、私はRuby/Pythonが箱から出して最も近いかもしれないことに同意する必要があります。

ケント

于 2009-03-29T14:14:38.290 に答える
0

基本はその方向への最初のアプローチであり、別の返信で示されているように、Perl では人間の言語にかなり近いコードも許可されます (句読点をすべて無視すれば)。

ラテン語を Perl に翻訳する方法に関する非常に興味深い記事を読みました(Perl モジュールもあります)。

したがって、人間の言語に十分な構造があり、あいまいさを避けるために十分な制限を導入すれば、実際に (ほとんどの場合) 人間の言語でプログラミングできます。

しかし、それは非常に冗長であり、読みやすく正確にするのが難しいため、実際には誰も実際に行っていません。

于 2008-10-14T20:58:49.453 に答える
0

どうしてそうするか?これは、コードを読み取る脳内の R2D2 にとって機械に優しくありません。

于 2008-10-14T21:00:53.913 に答える
0

私はCOBOL(そして私たちに近い... SQL)がうまくいかないことを知っていますが、これらは数十年前に設計されました。また、彼らは「英語」のプログラミング言語についての誇大宣伝を利用したと思います。また、適切な言語分析ではあまり進んでいないと思います。優れたプログラマーが集まって言語を分析し、それを機能させれば、今日では英語 (自然な英語... 言語) でプログラミングすることは可能だと思います。これは大きなプロジェクトですが、私たちのコンピューティング能力があれば実現できると確信しています。言い換えれば、私は人々が COBOL のために英語のようなプログラミングの考えを捨てる方法が好きではありません。Cobol は初期のプログラミング言語であり、当時の設計者は話し言葉の英語を参考にすることにしました。彼らは、英語が親しみやすく、マーケティング資料にも適していると考えていました。COBOLコンパイラが自然な英語を読めるようにするために、彼らが本当に一生懸命努力したとは思いません。今日、過去から学び、自然言語認識の適切なシステムを完成させるために真剣な努力がなされた場合、それはうまくいくと思います-しばらくすると(おそらく数年後)。だとすると、平易な英語でプログラミングできたらいいと思いませんか? もちろん、それは自己学習型 (コンピューターはその場で何かを学習する必要があります) であり、対話型 (コンピューターはユーザーが混乱したときに選択肢の中から選択するように求めることができなければなりません) でなければなりません。今日、過去から学び、自然言語認識の適切なシステムを完成させるために真剣な努力がなされた場合、それはうまくいくと思います-しばらくすると(おそらく数年後)。だとすると、平易な英語でプログラミングできたらいいと思いませんか? もちろん、それは自己学習型 (コンピューターはその場で何かを学習する必要があります) であり、対話型 (コンピューターはユーザーが混乱したときに選択肢の中から選択するように求めることができなければなりません) でなければなりません。今日、過去から学び、自然言語認識の適切なシステムを完成させるために真剣な努力がなされた場合、それはうまくいくと思います-しばらくすると(おそらく数年後)。だとすると、平易な英語でプログラミングできたらいいと思いませんか? もちろん、それは自己学習型 (コンピューターはその場で何かを学習する必要があります) であり、対話型 (コンピューターはユーザーが混乱したときに選択肢の中から選択するように求めることができなければなりません) でなければなりません。

于 2010-07-20T02:31:17.603 に答える
0

ノースウェスタン ポリテクニック大学の研究およびインキュベーション センターの Web サイト ( http://www.jumpulse.com ) をチェックして、ユーザーと人間の言語だけで通信する人間言語プログラミング言語Newを確認してください。New は、完全に自動化されたソフトウェアに基づいています。10歳以上の方が使用できるはずです。

于 2011-11-08T14:43:09.163 に答える
0

以前は、OS/360 のオブジェクト コードを「読み取る」ことができました。これは、バックグラウンドで OP マネージャーのペーシングを使用して、午前 2 時のダンプ分析に何時間も費やした結果です。

したがって、OBJECT コードは人間が読めるものとしてカウントされると思います。

「自然言語」コードの主な問題は、コードがあいまいになる可能性があることです。英語は、文を正しく解釈するために、文化的、文脈的、および「気分」に特に依存します。これが、法律文書がそのような奇妙で堅苦しい言語で書かれている理由であり、英語で何らかの正確さを達成する唯一の方法です.

これは、COBOL の大きな落とし穴の 1 つでした。'IF A NOT = B OR C' のコンパイラの解釈は、C の "!(A == B) || A == C" の正反対のカジュアルな読者の解釈でしたが、!(A = = B || A == C)。

もう一つの大きな問題は句読点でした。あなたの脳は句読点を「前処理」するので、意識レベルで実際に「見る」ことはありません。期間 '。' コードのブロックを区切るため、初期の COBOL では重要でしたが、ピリオドの欠落や余分なピリオドを見つけるのは非常に困難でした。これは、C で '=' と '==' を区別するのと少し似ていますが、もっと悪い点があります。

于 2009-09-22T02:13:05.473 に答える
0

あなたがおそらく言及しているのは関数型プログラミングだと思いますか?F# は 1 だと思いますが、開発者としての私にとってはもっと複雑だと思います

于 2009-09-22T02:17:52.123 に答える
0

リボルが迫る

于 2009-10-14T06:10:12.263 に答える
0

ビジネスで読み取り可能な DSLに関する Martin Fowler のエッセイを読む必要があります。

于 2009-09-22T02:23:30.570 に答える
0

Visual Basic (および一般的な BASIC ベースの言語) は、人間の言語に限りなく近いものです。Pythonもかなり近いと思います。これらを使用すると、十分に注意すれば、コードを構造化された英語として読み取ることができますが、あいまいさが多すぎるため、自然な英語のコンパイラはありません。

于 2008-10-14T20:55:24.080 に答える
-1

パール;-)

于 2009-09-22T02:48:38.787 に答える