tiobe lenguaje language indice programming-languages nlp

programming languages - language - ¿Qué lenguaje de programación se parece más al lenguaje natural?



rust lenguaje (30)

Tengo la idea para esta pregunta de numerosas situaciones en las que no entiendo de qué está hablando la persona y cuándo otros no me entienden.

Entonces, una solución "inteligente" sería hablar un lenguaje de computadora. :)

Me interesa saber qué tan lejos puede llegar un lenguaje de programación para acercarse al lenguaje natural (inglés). Cuando digo near, me refiero no solo al uso de palabras y oraciones, sino que para poder "hacer" cosas que un lenguaje natural puede "hacer" y "do" quiero decir que puede usarse (de forma muy limitada) como un reemplazo para el lenguaje natural.

Sé que esto es imposible (¿verdad?), Pero creo que esto puede ser interesante.


Applescript se ve como un lenguaje natural.


Bueno, se supone que Ruby y Python están bastante cerca. Ruby incluso llega al extremo de agregar palabras clave especiales que simulan la vida real. Tal como la palabra clave a menos, etc.

Por supuesto, si escribe un código real en cualquiera de esos 2 idiomas, no es realmente como el lenguaje natural, pero de nuevo ¿qué es?


COBOL dice mucho como inglés

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.

fuente


COBOL fue creado con la intención específica de ser como el lenguaje natural (Inglés en este caso)


Cobol está cerca de Inglés, ya que se pone

Creo que Logo tampoco está muy lejos del inglés


Con Ruby y Oslo (y posiblemente F #), podrías construir un DSL muy amigable con el idioma. Esa es al menos la promesa de Oslo. Aquí puede encontrar un ejemplo de una gramática de Oslo para BDD.



Desearía que hubiera un L M onitorio de Microsoft Liminado que se lea en inglés para que todos, incluso los no programadores, lo puedan entender ... ¡Tal vez deberíamos crear uno! ( robado de aquí )


Diría SQL o COBOL.


El lenguaje natural bueno es equívoco y requiere algo más que una lectura lineal literal para comprender. Pero concediéndolo, VB.NET se está acercando en algunos constructos. Lo más cerca que he visto.

Para Loop en VB.NET

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

Es casi tan "natural" como lo he visto sin ser demasiado detallado.


El lenguaje que Richard Pryor usó para transferir millones de dólares en Superman III fue muy cercano:

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

;-)

EDITAR: caracteres corregidos ;-)


Eso se llama "pseudocódigo". Utiliza los medios necesarios para comunicar la intención del código (lo has escrito o escribirás más tarde).

Cualquier lenguaje de programación tiene algunas características que son ambiguas para los de afuera.


Forth está basado en polaco inverso, y funcionaría naturalmente para algunas personas.

"Aprende pronto, lo haré" - Yoda.


HyperTalk: el lenguaje detrás de la HyperCard de 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 en Wikipedia


Lisp (por supuesto (si sabes a lo que me refiero (jaja)))


Lo que normalmente llamamos "pseudocódigo" es muy, muy parecido a Pascal . Eso probablemente no lo hace particularmente cercano al inglés natural, pero si no fuera más simple que la mayoría de los lenguajes, no escribiríamos ningún seudocódigo (simplemente escribiríamos el código).


No sé si iría tan lejos como para decir que VB.NET está cerca del inglés, pero creo que es lo más parecido a lo que realmente se ve. Claro, una vez que lo ha programado por un tiempo, parece inglés, le lee como un libro a un experimentado programador de VB, pero si se detiene y piensa en el mundo real del inglés:

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

Está muy lejos de:

Escribe "Hola mundo" y pasa a la siguiente línea de la consola 10 veces.

Por supuesto, el inglés es ambiguo: ¿quiere que lo haga todo 10 veces, o simplemente escriba "Hello World" una vez y luego pase a la siguiente línea 10 veces?

Creo que tenemos que aprender a hablar de una manera menos ambigua:

Haga esto 10 veces: en la consola, escriba "Hola mundo" y pase a la siguiente línea.

Pero dudo mucho de que haya un lenguaje de programación que realmente se lea como inglés. Incluso aquellos fanáticos de Cobol que dicen que es como el lenguaje natural, realmente no lo es si te paras a pensar sobre cómo piensas las cosas de una manera real en lugar de hacerlo de la manera definida por el lenguaje de programación.

Incluso en VB estás limitado a la forma en que el marco dicta la forma en que haces las cosas ...


Perl tiene algunos principios de diseño que se basan en cómo los humanos procesan lenguajes naturales (ver http://www.wall.org/~larry/natural.html ).

Eso es algo diferente de los ataques sintácticos para hacer que el código se lea como oraciones en inglés u otro idioma. No estoy del todo convencido de que esos sean útiles. Como analogía, también puedo hacer arte ASCII con mi código, pero eso no significa que mi lenguaje se base en principios de composición visual.

Para dar un ejemplo de dónde puede no ser útil, suponga que hace lo que parece en algún lenguaje ruby ​​/ smalltalky:

3.times say "hello!"

Eso es bueno, hace que mi código sea un poco más legible, y hay un tipo similar de diversión en tener un loro que puede hablar, pero solo es útil si conozco las reglas subyacentes del lenguaje de la computadora. El hecho de que parezca inglés no me da ninguna influencia adicional. No puedo usar el motor de procesamiento de la gramática inglesa en mi cerebro para generar oraciones como las siguientes:

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


Si eres un conocedor, el lenguaje de programación de Shakespeare es bastante natural;)

Sin embargo, hay un límite de cuán "natural" se puede obtener en la programación. Los lenguajes humanos están demasiado abiertos a la interpretación, un lenguaje de programación debe ser específico y preciso, no creo que encaje bien con un lenguaje de programación "natural".


la sintaxis de VB.NET está muy cerca del idioma inglés


Depende de en qué círculos ingreses, pero LOLCODE podría considerarse como lenguaje natural;)

Ejemplo de bucle

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

En una nota seria, VB es un lenguaje bastante natural. Es fácil para los tipos que no son programadores aprender, por lo que la sintaxis debe ser bastante fácil de entender.


Good ''ol AppleScript promociona su semejanza con el inglés como una de sus fortalezas. Sin embargo, no es muy divertido trabajar con él.


Hay un lenguaje de programación llamado Inform que, en su encarnación más reciente, Inform 7, se parece mucho al lenguaje natural ... en particular, el lenguaje escrito.

Informar es muy específico para crear juegos de texto y aventuras, pero no hay una razón inherente de que los conceptos no puedan extenderse a otros ámbitos.

Aquí hay un pequeño fragmento del código Inform 7, tomado del juego Glass, de 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."

El código completo se puede encontrar aquí .

Este es un pequeño ejemplo simple ... realmente puede manejar un conjunto sorprendentemente robusto de ideas.

Debe señalarse que el código no es realmente una cifra extraña en la que los constructos tienen significados ocultos ... este código hace más o menos lo que cabría esperar. Por ejemplo:

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

crea un objeto que resulta ser una persona femenina, nombra ese objeto "anciana" y coloca ese objeto dentro del objeto de la sala denominado "Etapa". Luego se crean dos alias ("madre" y "madrastra" que también hacen referencia al objeto "anciana".

Por supuesto, a medida que los ejemplos se vuelven cada vez más complejos, los aros necesarios para saltar también se vuelven más complejos. El inglés es, por su propia naturaleza, ambiguo, mientras que el código de la computadora es definitivamente no. Entonces nunca tendremos un "matrimonio perfecto".


Yo propongo a Lua . Código de muestra:

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

No es el más parecido a un inglés, pero es bastante legible aunque lo diga yo mismo.


Aunque no es exactamente lo que pediste, hay idiomas que logran lo que quieres, pero desde la otra dirección. Lojban , por ejemplo, es un lenguaje hecho para ser utilizado como un lenguaje natural, pero sin ambigüedad.

Lojban (pronunciado [loʒban]) es un lenguaje humano construido sintácticamente sin ambigüedades basado en lógica de predicados.


Creo que su pregunta se basa en una falacia. La programación no se trata principalmente de traducir del lenguaje humano al lenguaje de la computadora. Es comprender los problemas técnicos y diseñar programas que es difícil, escribir en el código es una parte menor. Aprender un lenguaje de programación no convertirá a alguien en un programador, así como el aprendizaje de la notación musical los convertirá en compositores.

Dicho esto, si escribe a un nivel lo suficientemente alto en casi cualquier idioma y dedica unos minutos a explicar la sintaxis, puede comunicar la esencia de un fragmento de código a un programador no programador. Por el contrario, una especificación del lenguaje natural suficientemente precisa a veces puede traducirse en funciones de alto nivel (aunque las personas rara vez están dispuestas a esforzarse para escribir dicha especificación).


Para mí, es Python.

YMMV


El sánscrito se acerca a lo que describes. No tiene redundancias, fue el primer idioma en seguir a BNF, que es la base de todo el progreso moderno. la gramática del lenguaje, y comparte una ascendencia indoeuropea común con el inglés


pepinillo es un lenguaje específico de dominio para describir las especificaciones bdd ejecutables. Es utilizado, entre otros, por pepino (rubí) y flujo espectral ( dotnet ).

Ejemplo

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 |


¡Bien, inglés llano , por supuesto!

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.

Realmente no he usado esto, lo encontré aquí .