Подтвердить что ты не робот

Какой язык программирования больше всего похож на естественный язык?

У меня возникла идея по этому вопросу из многочисленных ситуаций, когда я не понимаю, о чем говорит этот человек, и когда другие меня не понимают.

Итак, "умным" решением было бы говорить на компьютерном языке.:)

Мне интересно, насколько далеко может идти язык программирования, чтобы приблизиться к (английскому) естественному языку. Когда я говорю рядом, я имею в виду не просто использовать слова и предложения, но чтобы иметь возможность "делать" вещи, которые естественный язык может "делать" и "делать" , я имею в виду, что его можно использовать (очень ограниченным образом) как замена естественного языка.

Я знаю, что это невозможно (не так ли?), но я думаю, что это может быть интересно.

4b9b3361

Ответ 1

Существует язык программирования Inform, который в своем последнем воплощении Inform 7 очень похож на естественный язык... в частности, на письменный язык.

Информ очень специфичен для создания текстовых приключенческих игр, но нет причин, по которым концепции не могут быть расширены в другие сферы.

Вот небольшой фрагмент кода Inform 7, взятый из игры Glass, Эмили Шорт.

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 tolerably attractive, in his flightless way. It 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 foot." 

Полный код можно найти здесь.

Это небольшой простой пример... он действительно может справиться с удивительно надежным набором идей.

Следует отметить, что код на самом деле не странный cypher, где конструкции имеют скрытые значения... этот код делает больше или меньше того, чего вы ожидаете. Например:

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

создает объект, который является женским лицом, который называет объект "старушка" и помещает этот объект в объект комнаты под названием "Этап". Затем создаются две псевдонимы ( "мама" и "мачеха", которые также ссылаются на объект "старушка".

Конечно, по мере того, как примеры становятся все более сложными, необходимые обручи для перехода также становятся более сложными. Английский по своей природе неоднозначен, в то время как компьютерный код наиболее определенно отсутствует. Поэтому мы никогда не получим "идеальный брак".

Ответ 2

Зависит от того, в какие круги вы входите, но 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 - довольно естественный язык. Легко для не-программирующих типов учиться, поэтому синтаксис должен быть довольно легко понят.

Ответ 3

Язык, на котором Ричард Прайор использовал миллионы долларов в Супермене III, был очень близок:

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

; -)

EDIT: исправлены символы; -)

Ответ 4

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.

источник

Ответ 5

Lisp (конечно (если вы знаете, что я имею в виду (LOL)))

Ответ 6

Хорошо 'ol AppleScript рекламирует свое сходство с английским как одну из его сильных сторон. Однако работать с ним не очень удобно.

Ответ 7

Если вы ценитель, Язык программирования Шекспира довольно естественен;)

Существует ограничение на то, как "естественный" вы можете получить в программировании. Человеческие языки слишком открыты для интерпретации - язык программирования должен быть конкретным и точным, я не думаю, что он хорошо связан с наличием "естественного" языка программирования.

Ответ 8

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

HyperTalk в Википедии

Ответ 9

Я не знаю, что я дошел до того, что VB.NET близок к английскому языку, но я думаю, что это примерно так же близко, как и вы. Конечно, как только вы запрограммировали его на некоторое время, он кажется английским - он читается как книга опытного программиста VB, но если вы остановитесь и подумаете о реальном мире:

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

Прошел длинный путь:

Напишите "Hello World" и перейдите к следующей строке консоли 10 раз.

Конечно, англичане неоднозначны - он хочет, чтобы вы делали все это 10 раз или просто пишите "Hello World" один раз, а затем переходите к следующей строке 10 раз?

Думаю, нам нужно научиться говорить менее двусмысленно:

Сделайте это 10 раз: на консоли напишите "Hello World" и перейдите к следующей строке.

Но я очень сильно сомневаюсь в том, что язык программирования действительно читается, как английский. Даже те фанаты Cobol, которые говорят это как естественный язык, - это действительно не так, если вы остановитесь и подумаете о том, как вы думаете о вещах реальным образом, а не в том, как это определено языком программирования.

Даже в VB вы ограничены тем, как структура диктует то, как вы делаете...

Ответ 10

Хорошо, Обычный английский, конечно!

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.

Я на самом деле не использовал это - я нашел здесь.

Ответ 11

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 essential in 
// the computer language
3 times say "hello!" // syntax error

// In a natural language, a reordering might make
// sense, but it 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

Ответ 12

gherkin - это доменный язык для описать исполняемый bdd -спецификации. Он используется среди других cucumber (ruby) и specflow (dotnet).

Пример

    Feature: Browsing
        In order to see who 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  |

Ответ 13

Ну, Ruby и Python должны быть довольно близки. Ruby даже доходит до добавления специальных ключевых слов, которые имитируют реальную жизнь. Например, ключевое слово if и т.д.

Конечно, вы набираете реальный код на любом из этих двух языков, это не очень похоже на естественный язык, но опять же что такое?

Ответ 14

Я бы сказал, SQL или COBOL.

Ответ 15

Синтаксис VB.NET очень близок к английскому языку

Ответ 16

Forth - по-польски, и для некоторых людей он будет работать естественным образом.

"Учись быстро, я буду" - Йода.

Ответ 17

Ну естественный язык двусмыслен, и для понимания требуется немного больше, чем буквальное линейное чтение. Но, будучи предоставленным, VB.NET приближается к некоторым конструкциям. Ближе всего я видел.

Для цикла в VB.NET

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

Это о "естественном", как я видел, не будучи слишком многословным.

Ответ 18

Это называется "псевдокодом". Вы используете любые средства, необходимые для передачи информации о намерении кода (вы написали или позже напишите).

Любой язык программирования имеет некоторые функции, которые неоднозначны для посторонних.

Ответ 19

Хотя не совсем то, что вы просили, есть языки, которые выполняют то, что вы хотите, но с другого направления. Lojban, например, является языком, который используется как естественный язык, но без двусмысленности.

Лойбан (произносится [loʒban]) - это построенный, синтаксически однозначный человеческий язык, основанный на предикате логика.

Ответ 20

Applescript выглядит как естественный язык.

Ответ 22

Санскрит близок к тому, что вы описываете. У него нет избыточности, это был первый язык, который следует за BNF, который является основой для всех современных прог. языковая грамматика, и она разделяет общий индоевропейский спуск с английским языком

Ответ 23

Я считаю, что ваш вопрос основан на ошибке. Программирование в основном не связано с переводом с человеческого языка на компьютер. Это понимание технических проблем и разработка программ, которые сложны, ввод текста в код является второстепенной. Изучение языка программирования не сделает кого-то программистом больше, чем изучение музыкальной нотации сделает их композитором.

Тем не менее, если вы пишете на достаточно высоком уровне практически на любом языке и тратите несколько минут на объяснение синтаксиса, вы можете передать суть куска кода специальному не-программному. И наоборот, достаточно точная спецификация естественного языка иногда может быть переведена на функции высокого уровня (хотя люди редко желают приложить усилия, чтобы написать такую ​​спецификацию.)

Ответ 24

COBOL был создан с особым намерением быть похожим на естественный язык (в данном случае английский)

Ответ 25

С Ruby и Oslo (и, возможно, F #) вы можете создать очень удобный для общения DSL. Это по крайней мере обещание Осло. Вы можете найти пример грамматики Осло для BDD здесь.

Ответ 26

Для меня это Python.

YMMV

Ответ 27

Cobol близок к английскому, так как он получает

Я считаю, что логотип также не слишком далеко от английского языка

Ответ 28

Я бы хотел, чтобы существовало CO mmon B usiness O, ориентированное на L, которое читается как английский, поэтому каждый, даже не-программисты могли бы уйти от него... Может быть, мы должны создать его! (украден отсюда)

Ответ 29

То, что мы обычно называем "псевдокодом", очень, очень близко к Pascal. Вероятно, это не делает его особенно близким к естественному английскому, но если бы это было не проще, чем у большинства языков, мы вообще не писали бы псевдокод (мы просто пишем код).

Ответ 30

Я предлагаю 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

не самый английский, но довольно чертовски читаемый, даже если я сам так говорю!