Есть ли язык программирования с семантикой, близким к английскому?

Большинство языков позволяют "tweek" некоторым расширенным частям синтаксиса (С++, С#) и/или семантики, которые вы будете использовать в своем коде (Katahdin, lua). Но я не слышал о языке, который может просто полностью определить, как будет выглядеть ваш код. Итак, не существует ли уже существующего языка, который имеет такие возможности для переопределения синтаксиса all и определения семантики?

Пример того, что я хочу сделать, в основном из кода С# ниже:

foreach(Fruit fruit in Fruits)
{
  if(fruit is Apple)
  {
    fruit.Price =  fruit.Price/2;
  }
}

Я хочу, чтобы у меня была возможность написать вышеприведенный код на моем идеальном языке:

Check if any fruits are Macintosh apples and discount the price by 50%.

Преимущества, которые приходят мне на ум с точки зрения кодера на этом "мнимом" языке:

  • Очень ясно, что происходит (самоописательно) - это простой английский, ведь даже ребенок поймет мою программу.
  • Скрывает все сложности, которые я должен написать на С#. Но почему я должен знать, что if, арифметические операторы и т.д., поскольку уже реализованы

Недостатки, которые я вижу для кодера, который будет поддерживать эту программу, следующие:

  • Возможно, вы выразили бы эту программу по-другому от меня, чтобы не получить все информацию, которую я выразил в своем предложении
  • Программы могут быть довольно многословными и сложными для отладки, но, если возможно, даже приблизить этот тип синтаксиса, возможно, больше людей начнут программировать правильно? Думаю, это было бы потрясающе. Я могу пойти на работу и просто написать эссе, чтобы нарисовать квадрат на winform следующим образом:

Create a form called MyGreetingForm. Draw a square with in the middle of MyGreetingFormwith a side of 100 points. In the middle of the square write "Hello! Click here to continue" in Arial font.

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

If the user clicks on square in the middle of MyGreetingForm show MyMainForm.

В приведенном выше коде "в основном" компилятор должен: 1) сгенерировать обработчик события 2) проверить, есть ли какой-либо квадрат в середине формы, а если есть - 3) скрыть форму и показать другую форму

Мне очень сложно это сделать, но это не выглядит невероятно. IMO для меня хотя бы приближает это (я могу лично создать парсер для выполнения 3 шагов выше np, и это в основном то же самое, что он должен делать любым способом, когда вы добавляете даже в С# a.MyEvent=+handler;, поэтому я не вижу здесь проблемы), поэтому я думаю, что кто-то уже сделал что-то вроде этого? Или существует какое-то практическое бремя сложности для создания такого языка программирования "эссе", который я не вижу? Я имею в виду, что еще хуже, если парсер не так хорош? - ваша программа выйдет из строя, поэтому вам придется переформулировать ее:)

Ответ 1

Отъезд:

Осмосский орден простых программистов английского языка

Пример кода:

The background is a picture.

A button has a box and a name.

To clear the status:
  Clear the status' string.
  Show everything.

To create the background:
  Draw the screen box with the white color.
  Loop.
  Pick a spot anywhere in the screen box.
  Pick a color between the lightest gray color and the white color.
  Dab the color on the spot.
  If a counter is past 80000, break.
  If the counter is evenly divisible by 1000, refresh the screen.
  Repeat.
  Extract the background given the screen box. \or Create the background from the screen. Or something.

Ответ 2

Некоторые дизайнеры интерактивной фантастики используют синтаксис языка, очень близкий к английскому языку. Здесь некоторый Inform 7 код, который вы можете играть онлайн:

The foyer is a room.

The apple is in the foyer. It is edible. The description is "This is a ripe, 
green granny smith apple."

The apple core is a thing. The description is "This apple core all that is 
left of that granny smith apple you just consumed."

After eating the apple:  
  now the apple core is in the player;
  say "You gobble down the apple careful not to eat any of those cyanide-
  laced seeds you heard about."

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

Ответ 3

Я не думаю, что это была бы легкая задача, и я не думаю, что это облегчит жизнь для отладки

Как вы справитесь с этими проблемами?

  • орфографические ошибки
  • разные диалекты в разных частях мира.
  • разные диалекты в одной и той же части мира
  • синонимы
  • какая часть предложения вы сначала разбираете?
  • разрыв (разрыв) и разрыв (из глаза) оба слова написаны одно и то же, но означают две разные вещи.

Верните COBOL или вы можете вспомнить "Walk West", "Изучить дверь", "Push Door", "Open Door", "Использовать ключ на двери":)

изменить - как бы вы набрали это?

Ответ 4

Я написал расширяемый компилятор English-to-Python под названием EngScript, который преобразует структурированный английский в рабочий код Python.

Это пример кода EngScript:

print{create a string from the file called "README.txt"}
print{save the string "Woohoo!" to a file called "ExampleText.txt"}
print{the first 3 letters of "EngScript"}

Это результат, который был сгенерирован компилятором EngScript:

print(pythonFunctions.stringFromTextFile("README.txt"))
print(pythonFunctions.writeStringToFile("ExampleText.txt", "Woohoo!"))
print("EngScript"[0:(3 - 1)+1])

Ответ 5

Попробуйте использовать язык программирования под названием "Google" - он имеет естественный английский интерфейс, а фрагмент кода возвращает все ответы, которые вы предлагаете. Интересно, что через шесть минут после того, как вы задали этот вопрос, эта страница является # 1 для запроса:

Проверьте, есть ли какие-либо фрукты Macintosh яблоки и скидка на 50%

Используйте API Google, и я думаю, что у вас есть основа естественного английского языка программирования.