programing

자연어와 가장 유사한 프로그래밍 언어는 무엇입니까?

nasanasas 2020. 12. 26. 15:29
반응형

자연어와 가장 유사한 프로그래밍 언어는 무엇입니까?


나는 그 사람이 말하는 것을 이해하지 못하고 다른 사람들이 나를 이해하지 못하는 수많은 상황에서이 질문에 대한 아이디어를 얻었습니다.

따라서 "스마트 한"솔루션은 컴퓨터 언어를 말하는 것입니다. :)

프로그래밍 언어가 (영어) 자연어에 얼마나 가까이 갈 수 있는지 관심이 있습니다. 가까웠다 고 말할 때, 단순히 단어와 문장을 사용하는 것이 아니라 자연어가 "할 수있는"일을 "할 수 있다는 것"을 의미하고 "do"는 사용할 수 있다는 것을 의미합니다 (매우 제한된 방식으로). 자연어를 대체합니다.

불가능하다는 것을 알고 있지만 (그렇습니까?) 흥미로울 수 있다고 생각합니다.


Inform이라는 프로그래밍 언어가 있는데, 가장 최근에 구현 된 Inform 7 은 자연어, 특히 서면 언어와 매우 비슷합니다.

Inform은 텍스트 어드벤처 게임을 만드는 데 매우 구체적이지만 개념을 다른 영역으로 확장 할 수없는 내재 된 이유는 없습니다.

다음은 Emily Short가 만든 Glass 게임에서 가져온 Inform 7 코드의 작은 스 니펫입니다.

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

완전한 코드는 여기 에서 찾을 수 있습니다 .

이것은 작고 간단한 예입니다. 실제로 놀랍도록 강력한 아이디어 세트를 처리 할 수 ​​있습니다.

코드는 구조에 숨겨진 의미가있는 이상한 암호가 아니라는 점을 지적해야합니다.이 코드는 예상대로 수행 할 수 있습니다. 예를 들면 :

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

여성 인 물건을 만들고 그 물건의 이름을 "노부인"으로 지정한 다음 "무대"라는 방의 물건 안에 그 물건을 놓습니다. 그런 다음 두 개의 별칭 ( "어머니"및 "계모"가 생성되어 둘 다 "노부"객체를 참조합니다.

물론 예제가 점점 복잡 해짐에 따라 점프하는 데 필요한 후프도 더욱 복잡해집니다. 영어는 본질적으로 모호하지만 컴퓨터 코드는 가장 확실하지 않습니다. 따라서 우리는 "완벽한 결혼"을 결코 얻지 못할 것입니다.


어떤 서클에 참여 하느냐에 따라 다르지만 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는 꽤 자연스러운 언어입니다. 프로그래머가 아닌 유형은 쉽게 배울 수 있으므로 구문을 이해하기가 매우 쉬워야합니다.


Richard Pryor가 Superman III에서 수백만 달러를 이체하는 데 사용한 언어는 매우 유사했습니다.

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

;-)

편집 : 문자 수정 ;-)


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.

출처


Lisp (물론 (내 말이 무슨 뜻인지 안다면 (LOL)))


당신이 감정가라면 셰익스피어 프로그래밍 언어 는 상당히 자연 스럽습니다.)

하지만 프로그래밍에서 '자연 스러움'을 얻을 수있는 방법에는 한계가 있습니다. 인간의 언어는 해석에 너무 개방적입니다. 프로그래밍 언어는 구체적이고 정확해야합니다. '자연스러운'프로그래밍 언어와 잘 맞지 않는다고 생각합니다.


Good 'ol AppleScript 는 강점 중 하나로서 영어와 유사 함을 선전합니다. 그러나 함께 작업하는 것은 그리 재미 있지 않습니다.


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

Wikipedia의 HyperTalk


나는 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에서도 프레임 워크가 작업 방식을 지시하는 방식으로 제한됩니다.


음, 일반 영어 , 물론!

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.

나는 실제로 이것을 사용하지 않았다 – 나는 그것을 여기 에서 찾았다 .


gherkin 은 실행 가능한 bdd 사양을 설명하는 도메인 특정 언어입니다. 그것은하여 다른 사이에 사용되는 오이 (루비)와 specflow (DOTNET)를.

    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  |

Perl has some design principles that are based on how humans process natural languages (see http://www.wall.org/~larry/natural.html ).

That's a different thing from syntactical hacks to make code read like sentences in English or some other language. I'm not entirely convinced that those are useful. As an analogy, I can also make ASCII art with my code, but that doesn't mean that my language is based on principles of visual composition.

To give an example of where it may not be useful,suppose this does what it looks like it does in some rubyish/smalltalky language:

3.times say "hello!" 

That's nice, it makes my code a bit more readable, and there's a similar sort of fun in it to having a parrot that can talk, but it's only useful if I know the underlying rules of the computer language. The fact that it happens to look like English gives me no extra leverage or insight. I can't use the English grammar processing engine in my brain to generate sentences like the following:

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

Well, Ruby and Python are supposed to be fairly close. Ruby even goes to the length of adding special keywords that simulate real life. Such as the unless keyword, etc.

Of course, one you type real code in either of those 2 languages, it's not really like natural language, but then again what is?


I'd say SQL or COBOL.


the syntax of VB.NET is very near to English language


Forth is reverse-Polish based, and would work naturally for some people.

"Learn Forth quickly I will" - Yoda.


That is called "pseudocode". You use whatever means necessary to communicate the intent of the code (you have written or will later write).

Any programming language has some features that are ambiguous to outsiders.


Well natural language is equivocal, and takes a bit more than a literal linear reading to understand. But that being granted, VB.NET is getting close in some constructs. Closest I've seen.

For Loop in VB.NET

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

It's about as "natural" as I've seen without being too verbose.


Although not exactly what you asked for, there are languages that accomplish what you want, but from the other direction. Lojban, for example, is a language made to be used as a natural language, but without ambiguity.

Lojban (pronounced [ˈloʒban]) is a constructed, syntactically unambiguous human language based on predicate logic.


Applescript looks like natural language.


I believe William Shakespeare was the world's best programmer...

The Shakespeare Programming Language


I believe your question is based on a fallacy. Programming is not mainly about translating from human to computer language. It is understanding technical problems and designing programs that is hard, typing in the code is a minor part. Learning a programming language won't make someone a programmer any more than learning musical notation will make them a composer.

That said, if you write at a high enough level in almost any language and spend a few minutes explaining syntax, you can communicate the gist of a piece of code to a dedicated non-programer. Conversely, a precise enough natural language specification can sometimes be translated into high level functions (although people are rarely willing to put in the effort to write such a spec.)


COBOL was created with the specific intent of being like natural language (English in this case)


With Ruby and Oslo (and possibly F#), you could build a very language-friendly DSL. That's at least the promise of Oslo. You can find an example of an Oslo grammar for BDD here.


Sanskrit comes close to what you describe. It has no redundancies, it was the first language to follow BNF which is the basis of all modern prog. language grammar, and it shares a common Indo-European descent with English


Cobol is close to English as it gets

I believe Logo is also not too far from the English language


I wish there was a COmmon Business Oriented Language that read like English so everyone, even non-programmers could unterstand it... Maybe we should create one! (stolen from here)


What we normally call "pseudo-code" is very, very close to Pascal. That probably doesn't make it particularly close to natural English, but if it weren't simpler than most langauges, we wouldn't write pseudo-code at all (we'd just write code).


I thought of Eiffel. Quote from here:

Raphael Simon, lead software engineer for Eiffel Software, said the language was designed so that one could use natural language to write the program.

See for example the 99 bottles of beer program.

I wouldn't say it's the "most" natural, but I find it rather natural.


I propose Lua. Sample Code:

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

not the most english-like, but pretty darn readable even if i do say so myself!

ReferenceURL : https://stackoverflow.com/questions/491971/what-programming-language-is-most-like-natural-language

반응형