web-dev-qa-db-fra.com

Quel langage de programmation ressemble au sujet de la langue naturelle?

J'ai eu l'idée de cette question de nombreuses situations où je ne comprends pas ce que la personne parle et quand d'autres ne me comprennent pas.

Donc, une solution "intelligente" serait de parler une langue d'ordinateur. :)

Je suis intéressé à quel point un langage de programmation peut aller proche de la langue naturelle (anglais). Quand je dis à proximité, je veux dire non seulement à utiliser des mots et des phrases, mais pour être capable de "faire" des choses une langue naturelle peut "faire" et par "faire", je veux dire que cela peut être utilisé (de manière très limitée) comme remplacement pour la langue naturelle.

Je sais que c'est impossible (est-ce?) Mais je pense que cela peut être intéressant.

55
kliketa

Il y a une langue de programmation appelée informer que, dans sa dernière incarnation, informer 7, a l'air a lot comme une langue naturelle ... en particulier, une langue écrite.

Information est très spécifiquement pour la création de jeux d'aventure de texte, mais il n'y a pas de raison inhérente à ce que les concepts ne puissent pas être étendus à d'autres domaines.

Voici un petit extrait d'infos 7 Code, pris de la vitre de jeu, par Emily Short.

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

Le code complet peut être trouvé ICI .

C'est un petit exemple simple ... il peut réellement gérer un ensemble d'idées étonnamment robustes.

Il convient de souligner que le code n'est pas vraiment un chiffre étrange où les constructions ont des significations cachées ... Ce code fait plus ou moins ce que vous attendez. Par exemple:

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

crée un objet qui se trouve être une personne féminine, des noms qui font l'objet "vieille dame", et des lieux cet objet dans l'objet de la pièce appelé "Stade". Ensuite, deux alias ("mère" et "belle-mère" sont créés qui font également référence à l'objet "vieille dame".

Bien sûr, comme les exemples deviennent de plus en plus complexes, les cerceaux nécessaires à la saut à travers deviennent également plus complexes. L'anglais est, de par sa nature même, ambigu, tandis que le code informatique n'est pas définitivement pas. Nous n'obtiendrons donc jamais un "mariage parfait".

117
Beska

Dépend de quels cercles vous roulez, mais [~ # ~ # ~] lolcode [~ # ~] Pourriez être considéré comme une langue naturelle;)

Exemple de boucle:

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

Sur une note sérieuse, VB est une langue jolie naturelle. Il est facile pour les types non programmeurs à apprendre, la syntaxe doit donc être assez facile à comprendre.

43
Alex Fort

La langue Richard Pryor utilisait des millions de dollars à Superman III était très proche:

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

;-)

EDIT: Les caractères corrigés ;-)

32
Galwegian

Lisp (bien sûr (si vous savez ce que je veux dire (lol))))

18
Carl Seleborg

Si vous êtes un connaisseur, le langage de programmation Shakespeare est assez naturel;)

Il y a une limite à la façon dont vous pouvez faire la programmation. Les langues humaines sont trop ouvertes à l'interprétation - Un langage de programmation doit être spécifique et précis, je ne pense pas que cela maille bien avec un langage de programmation "naturel".

17
user7094

Bon 'ol Applecript sonne sa ressemblance à l'anglais comme l'une de ses forces. Cependant, ce n'est pas très amusant de travailler avec.

17
Bartek Tatkowski

Hypertalk - la langue derrière l'hypercard d'Apple.

 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

hypertalk sur wikipedia

14
AnthonyLambert

Je ne sais pas que j'irais aussi loin que Vb.Net est proche de la langue anglaise, mais je pense que c'est aussi proche que vous vraiment obtenir. Bien sûr, une fois que vous l'avez programmée depuis un moment, cela semble être anglais ---D Lire comme un livre à un fichier assaisonné VB programmeur, mais si vous arrêtez et Pensez au vrai monde anglais:

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

Est un long chemin de:

Ecrivez "Hello World" et passez à la ligne suivante de la console 10 fois.

Bien sûr, l'anglais est ambigu - veut-il que vous fassiez le tout 10 fois, ou écrivez simplement "Hello World" une fois et passez à la ligne suivante 10 fois?

Je suppose que nous devons apprendre à parler de manière moins ambiguë:

Faites cela 10 fois: dans la console, écrivez "Hello World" et passez à la ligne suivante.

Mais je doute beaucoup, il y a un langage de programmation qui vraiment se lit comme l'anglais. Même ces fanatiques de Cobol qui disent que c'est comme une langue naturelle - ce n'est vraiment pas si vous vous arrêtez et pensez à la façon dont vous pensez de choses dans une manière réelle place au lieu de la manière définie par le langage de programmation.

Même dans VB Vous êtes limité à la manière dont le cadre dicte la façon dont vous faites des choses ...

8
BenAlabaster

Eh bien, en anglais , bien sûr!

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.

Je n'ai pas vraiment utilisé cela - je l'ai trouvé ici .

8
Lucas Jones

gherkin est une langue spécifique de domaine pour décrire l'exécutable BDD - Spécifications. Il est utilisé entre autres par concombre (RUBY) et SPECFLOW (DotNet).

Exemple

    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  |
7
k3b

Perl possède des principes de conception basés sur la manière dont les humains traitent les langues naturelles (voir http://www.wall.org/~larry/natural.html ).

C'est une chose différente de hacks syntaxiques pour rendre le code lu comme des phrases en anglais ou dans une autre langue. Je ne suis pas entièrement convaincu que ce sont utiles. Comme analogie, je peux aussi faire ASCII art avec mon code, mais cela ne signifie pas que ma langue repose sur des principes de composition visuelle.

Pour donner un exemple de là où il peut ne pas être utile, supposons que cela fait ce à quoi il ressemble à une langue rubish/smalltalky:

3.times say "hello!" 

C'est bien, cela rend mon code un peu plus lisible, et il y a une sorte de plaisir similaire à avoir un perroquet qui peut parler, mais ce n'est utile que si je connais les règles sous-jacentes de la langue d'ordinateur. Le fait qu'il arrive à ressembler à l'anglais ne me donne aucun effet de levier supplémentaire ni aperçu. Je ne peux pas utiliser le moteur de traitement de la grammaire anglais dans mon cerveau pour générer des phrases comme les suivantes:

// 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
6
user8599

Eh bien, Ruby et Python sont censés être assez proches. Ruby passe même à la durée de l'ajout de mots-clés spéciaux qui simuler la vie réelle. Telle que le mot clé, etc.

Bien sûr, vous tapez le code réel dans l'une de ces 2 langues, ce n'est pas vraiment comme la langue naturelle, mais encore une fois quoi?

5
Sasha

Je dirais SQL ou COBOL.

5
Graeme Perrow

Est basé sur l'inverse-polonais et fonctionnerait naturellement pour certaines personnes.

"Apprenez vite je vais" - Yoda.

4
David Thornley

la syntaxe de vb.net est très proche de la langue anglaise

4
user434917

Une langue bien naturelle est équivoque et prend un peu plus qu'une lecture linéaire littérale à comprendre. Mais cela étant accordé, vb.net se rapproche de certaines constructions. Le plus proche que j'ai vu.

Pour boucle dans vb.net

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

C'est à peu près aussi "naturel" que j'ai vu sans être trop verbeux.

3
Sampson

Qui s'appelle "pseudocode". Vous utilisez les moyens nécessaires pour communiquer l'intention du code (vous avez écrit ou écrirez ultérieurement).

Tout langage de programmation a certaines fonctionnalités qui sont ambiguës aux étrangers.

3
Leonidas

Je crois que William Shakespeare était le meilleur programmeur du monde ...

le langage de programmation Shakespeare

2
Mike Robinson

AppleScript ressemble à une langue naturelle.

2
mouviciel

Je crois que votre question est basée sur une erreur. La programmation ne concerne pas principalement la traduction de l'homme à l'informatique. C'est la compréhension des problèmes techniques et la conception de programmes difficiles, la frappe dans le code est une partie mineure. Apprendre qu'un langage de programmation ne fera que quelqu'un un programmeur plus que l'apprentissage de la notation musicale leur fera un compositeur.

Cela dit, si vous écrivez à un niveau assez élevé dans presque toutes les langues et passez quelques minutes à expliquer la syntaxe, vous pouvez communiquer l'essentiel d'un morceau de code à un non-programmateur dédié. Inversement, une spécification de langage naturelle suffisamment précise peut parfois être traduite en fonctions de haut niveau (bien que les gens soient rarement disposés à mettre en œuvre pour écrire une telle spécification.)

2
RossFabricant

Sanskrit s'approche de ce que vous décrivez. Il n'a pas de licenciement, c'était la première langue à suivre BNF qui constitue la base de tous les programmes modernes. Grammaire de langue, et il partage une descente indo-européenne commune avec l'anglais

1
Reno

Avec Ruby et Oslo (et éventuellement F #), vous pouvez construire une DSL très conviviale par la langue. C'est au moins la promesse d'Oslo. Vous pouvez trouver un exemple de grammaire Oslo pour BDD - ici .

1
user29439

J'ai pensé à Eiffel. Devis de ici :

Raphael Simon, ingénieur logiciel principal pour le logiciel Eiffel, a déclaré que la langue était conçue pour que l'on puisse utiliser une langue naturelle pour écrire le programme.

Voir par exemple les 99 bouteilles de bière programme.

Je ne dirais pas que c'est le "le plus" naturel, mais je le trouve plutôt naturel.

0
Daniel Daranas

Ce que nous appelons normalement "pseudo-code" est très proche de Pascal . Cela ne le rend probablement pas particulièrement proche de l'anglais naturel, mais s'il n'était pas plus simple que la plupart des langauges, nous n'écririons pas du tout de pseudo-code (nous allions écrire du code).

0
rmeador

Cobol est proche de l'anglais comme il devient

Je crois que le logo n'est pas aussi pas loin de la langue anglaise

0
SQLMenace

Je souhaite qu'il y ait un [~ # ~ # ~] CO [~ # ~] Mmon [~ # ~ # ~] B [~ # ~] ussayage [~ # ~] O [~ # ~] riented [~ # ~ # ~] L [~ # ~] Angeuge qui a lu comme anglais, même les non-programmeurs Peut-on déformer ... Peut-être que nous devrions en créer un! ( volé d'ici )

0
Tamas Czinege