当前位置:  开发笔记 > 编程语言 > 正文

什么编程语言最像自然语言?

如何解决《什么编程语言最像自然语言?》经验,为你挑选了14个好方法。

我从很多情况下得到了这个问题的想法,我不明白这个人在说什么,什么时候别人不理解我.

因此,"智能"解决方案是说一种计算机语言.:)

我感兴趣的是编程语言可以接近(英语)自然语言.当我说近,我的意思不仅仅是使用单词和句子,而是能够"做"自然语言可以"做"的事情和"做",我的意思是它可以被使用(以非常有限的方式)作为自然语言的替代品.

我知道这是不可能的(是吗?)但我认为这可能很有趣.



1> Beska..:

有所谓的通知,在其最近的化身,通知7编程语言,看起来很多像自然语言...特别是书面语言.

Inform非常专门用于创建文本冒险游戏,但没有固有的理由说这些概念无法扩展到其他领域.

这是一小段Inform 7代码,取自Emily Short的游戏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'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. 

创建一个恰好是女性的对象,将对象命名为"老太太",并将该对象放置在称为"舞台"的房间对象中.然后创建了两个别名("母亲"和"继母",它们也都引用了"老太太"对象.

当然,随着示例变得越来越复杂,跳过的必要环节也变得更加复杂.就其本质而言,英语是模棱两可的,而计算机代码最明确的不是.所以我们永远不会得到"完美的婚姻".


请注意,使用Inform写入的内容并不像阅读它一样直观!尽管有趣.
@Zubair:嗯,语言非常擅长于它的设计目标,即创建文本冒险游戏.它在处理语言变量方面实际上非常强大,但它也可以处理更多的抽象概念,例如那些可以在面向拼图的游戏中找到的概念.许多对象都预先构建到库中,但程序员可以从头开始选择具有任意集行为的构建对象.毫不奇怪,概念越抽象,语言越偏离人们可能认为的"自然".

2> Alex Fort..:

取决于你滚动的圈子,但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是一种非常自然的语言.非程序员类型很容易学习,因此语法必须非常容易理解.


抱歉,VB不是一种自然语言..我理解你是否已经在VB中编写了一段时间,所以它看起来很自然,所以也许你的眼睛已经被VBfied

3> Galwegian..:

理查德·普赖尔(Richard Pryor)在超人III中用来转移数百万美元的语言非常接近:

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

;-)

编辑:字符更正;-)



4> Josh Mein..:

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.

资源


当我使用COBOL时,我们没有行号.我们不得不在两个方向,上坡,在颈部深雪中读它.
我听说当COBOL发布时,很多人都希望在几年内不再有专业的程序员 - 很明显,COBOL很容易使用,任何需要程序的人都可以自己编写.
除了行号...

5> Carl Selebor..:

Lisp(当然(如果你知道我的意思(LOL)))


哦...我明白了(该死的(这真的很有趣))!
(从里到外阅读(错误!))

6> Bartek Tatko..:

好的' Apple Apple吹捧它与英语的相似性是其优势之一.但是,使用起来并不是很有趣.


AppleScript是一种只读语言=)
告诉作者"bartek""我倾向于同意"结束告诉

7> 小智..:

如果你是一个鉴赏家,莎士比亚编程语言是相当自然的;)

尽管如此,你可以在编程中获得"自然"的限制.人类语言过于开放无法解释 - 编程语言需要具体而精确,我不认为这与使用"自然"编程语言很好地融合在一起.


使用100%的CPU抱怨其父进程,几天没有做任何事情,然后最终杀死系统上的所有进程,包括它自己!
让我想知道 - "哈姆雷特"是一个有效的程序吗?如果是这样,它会做什么?

8> AnthonyLambe..:

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


HyperTalk也是AppleScript的祖先.

9> BenAlabaster..:

我不知道我会说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> Lucas Jones..:

那么,简单的英语,当然!

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

gherkin是一种特定于域的语言,用于描述可执行的 bdd -specifications.它由黄瓜(红宝石)和 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  |



12> 小智..:

Perl有一些基于人类如何处理自然语言的设计原则(参见http://www.wall.org/~larry/natural.html).

与语法黑客不同的是,使用英语或其他语言将代码读成句子.我并不完全相信这些是有用的.作为类比,我也可以使用我的代码制作ASCII艺术,但这并不意味着我的语言基于视觉构图的原则.

举一个它可能没用的地方的例子,假设这看起来像是用一些rubyish/smalltalky语言做的:

3.times say "hello!" 

这很好,它使我的代码更具可读性,并且有一种类似的乐趣就是让一只可以说话的鹦鹉,但它只有在我了解计算机语言的基本规则时才有用.碰巧看起来像英语的事实让我没有额外的杠杆或洞察力.我无法在脑中使用英语语法处理引擎来生成如下句子:

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


是的,但是Perl需要在可读性方面获得所有帮助,IMO.

13> Sasha..:

嗯,Ruby和Python应该相当接近.Ruby甚至可以添加模拟现实生活的特殊关键字.比如除非关键字等

当然,你用这两种语言中的任何一种键入真实代码,它不是真的像自然语言,但那又是什么?


呃,我已经看过了两个,我认为他们没有资格.

14> Graeme Perro..:

我会说SQL或COBOL.


"SELECT ID,LNAME,FNAME,CONCAT(FNAME,LNAME)AS FULLNAME from tblA LEFT JOIN tblB ON tblB.FKID = tblA.ID"就像自然语言?
该死的 - 如果那就像自然语言 - 你说的是什么语言?我的意思是,在你对它们进行了一段时间的编码后,确定它是有意义的 - 但这是因为你开始像代码一样思考,而不是相反.
为了跟进,这是非常可读的:"SELECT id,last_name,first_name,CONCAT(first_name,last_name)AS full_name FROM people LEFT JOIN last_names ON last_name.id = first_name.id"就像其他人所说,它取决于变量名.
我不知道."能够推断语句将做什么"和"像自然语言"之间存在很大差异.我会说这些sql的例子很容易让新手破译......但是它们都不像自然语言.
推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有