54

我的意思是,是否有一种具有人类风格编码的编码语言?例如:

Create an object called MyVar and initialize it to 10;
Take MyVar and call MyMethod() with parameters. . .

我知道它不是那么有用,但是创建这样的语法会很有趣。

4

51 回答 51

123

LOLCODE怎么样?

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

简单本身!

于 2008-10-14T20:59:58.080 回答
104

COBOL很像这样。

SET MYVAR TO 10.
EXECUTE MYMETHOD with 10, MYVAR.

来自维基百科的另一个示例:

ADD YEARS TO AGE.
MULTIPLY PRICE BY QUANTITY GIVING COST.
SUBTRACT DISCOUNT FROM COST GIVING FINAL-COST.

奇怪的是,尽管它的设计可以用英语阅读,但大多数程序员用奇怪的命名约定完全破坏了这一点:

SET VAR_00_MYVAR_PIC99 TO 10.
EXECUTE PROC_10_MYMETHOD with 10, VAR_00_MYVAR_PIC99.
于 2008-10-14T20:54:15.580 回答
97

通知 7

Inform 7 可能是我认为最适合以人类语言方式设计的语言。它是专门用于编写冒险游戏的应用程序。

它基于基于规则的语义,您可以在其中编写大量规则来描述对象及其位置之间的关系。例如,下面的部分是一个 Inform 7 程序:

"Hello Deductible" by "I.F. Author"

The story headline is "An Interactive Example".

The Living Room is a room. "A comfortably furnished living room."
The Kitchen is north of the Living Room.
The Front Door is south of the Living Room.
The Front Door is a door. The Front Door is closed and locked.

The insurance salesman is a man in the Living Room. The description is "An insurance salesman in a tacky polyester suit. He seems eager to speak to you." Understand "man" as the insurance salesman.

A briefcase is carried by the insurance salesman. The description is "A slightly worn, black briefcase."  Understand "case" as the briefcase.

The insurance paperwork is in the briefcase. The description is "Page after page of small legalese." Understand "papers" or "documents" or "forms" as the paperwork.

Instead of listening to the insurance salesman: 
    say "The salesman bores you with a discussion of life  insurance policies.  From his briefcase he pulls some paperwork which he hands to you.";
    move the insurance paperwork to the player.

引用自维基百科的示例

于 2008-10-14T21:38:31.513 回答
42

AppleScript 与此非常接近,尽管这显然取决于平台。

这是打开 iTunes 并播放播放列表的脚本

tell application "iTunes"
    activate
    play playlist "Party Shuffle"
end tell

来源:AppleScript 示例

于 2008-10-14T20:53:44.270 回答
32

这是大约 1980 年代初的“下一件大事”,我在最初几年的大部分时间里作为一名编码员在“自然”中工作,这被认为是新的 4GL(第四代语言)中最好的,它旨在使数据访问(在这种情况下是对 ADABAS 数据库)具有人类可读性。

当然,它绝对没有做任何类型的事情。我们最终得到的只是冗长的结构不良的代码。这两种产品仍然存在,但您从未听说过它们,这在某种程度上证明了它的死胡同。

实际上,在那个时期,似乎普遍希望超越“编程”,进入某种 2001 年启发的人工智能天堂。甲骨文非常热衷于代码生成,我记得有一种兴趣被称为“最后一个”的产品被推销给经理,该产品可以自动生成您想要的任何程序,并使您所有的编程人员都变得多余。似乎没有达到预期;-)

值得记住的是,SQL 最初是在某些方面作为一种允许管理层直接查询其数据的方式销售的。我什至被派去学习基本 SQL 的课程(在一个大型的全国性铁路运输组织 - 钢铁品种),其中包括初级管理类型,因为他们计划将基本查询工具放在他们手中。那是怎样的一场灾难。

也许 50 年后可能会有所不同,但在游戏编码的当前阶段,需要一定的思路和实现清晰性,最好通过为这些目的设计的专用语法进行调解,而不是任何近似于不清楚和模棱两可的自然语言. 最接近的近似值可能是物理学,其中主题的本质在于所使用的数学(想想物理学的编程语言)而不是冗长的词。

添加

我忘记了,除了 COBOL 之外,还有 PL/1,它曾被认为允许 NASA 将一个人送上月球,它和 COBOL 一样冗长,并且更加努力地成为“经理可读的”。这就是为什么现在也没有人真正听说过它的原因:-)

于 2008-10-14T21:25:44.953 回答
32

推广“自然语言”编程的项目本质上注定要失败。

—— Edsger W.Dijkstra,我们如何说出可能会造成伤害的真相?

于 2009-01-02T19:09:14.583 回答
18

所有语言都是“人类可读的”。:) 其他人将如何创建它?话虽如此,支持 DSL 的语言可以非常直观,例如Boo

于 2008-10-14T21:12:21.830 回答
18

厨师!任何人都可以阅读食谱吗?看你好世界

Ingredients.
72 g haricot beans
101 eggs
108 g lard
111 cups oil
32 zucchinis
119 ml water
114 g red salmon
100 g dijon mustard
33 potatoes

Method.
Put potatoes into the mixing bowl. Put dijon mustard into the mixing bowl. 
Put lard into the mixing bowl. Put red salmon into the mixing bowl. Put oil into the mixing bowl. 
Put water into the mixing bowl. Put zucchinis into the mixing bowl. Put oil into the mixing bowl. 
Put lard into the mixing bowl. Put lard into the mixing bowl. Put eggs into the mixing bowl. 
Put haricot beans into the mixing bowl. Liquefy contents of the mixing bowl. 
Pour contents of the mixing bowl into the baking dish.

对不起,如果这不是一个严肃的答案,但这太棒了。:-)

于 2008-10-15T00:29:06.723 回答
15

让编程语言读起来像(冗长的)普通语言,就像要求人们一直用法律术语交谈。所有多余的措辞都会妨碍您。

理想的编程语言应该具有尽可能透明的语法,并让程序背后的概念脱颖而出。显然,在快速学习曲线和使用最少但晦涩的语法(想想 Perl,甚至 K)之间需要权衡取舍。

于 2008-10-14T21:04:01.363 回答
13

通过创建一组规则,可以像这样在Prolog中进行逻辑编程。您可以为特定领域构建一个语法(或下载一个),创建一个知识库,然后对其进行查询。定义语法后,您可以执行以下操作:

bob is a parent of tim.
mary is a parent of bob.

?- X is a grandparent of tim.
X = mary

?- jim is a parent of bob.
false
于 2008-10-14T21:07:30.497 回答
13

我看到莎士比亚的编程语言还没有被提及。

这些程序被编码为看起来像莎士比亚戏剧,戏剧中的个体角色是可以容纳数字的变量,并且剧本中的各种短语操纵角色和他们持有的数字。例如,“说出你的想法”命令一个角色输出他的价值。

于 2008-10-15T13:49:44.717 回答
9

苹果脚本

tell application "Finder"
 set the percent_free to ¬
 (((the free space of the startup disk) / (the capacity of the startup disk)) * 100) div 1
end tell
if the percent_free is less than 10 then
 tell application (path to frontmost application as text)
 display dialog "The startup disk has only " & the percent_free & ¬
 " percent of its capacity available." & return & return & ¬
 "Should this script continue?" with icon 1
 end tell
end if
于 2008-10-14T20:54:22.210 回答
7

我可以阅读 C。这意味着它是人类可读的(因为我是人类)。这对普通人来说太简洁了。编程语言的一般概念是最大化有关计算机应如何在给定行中运行的信息。

这就是 Ruby 如此受欢迎的原因。它以最少的文本最大化了功能。英语(或任何其他自然语言)是一种非常不精确的、低信息/字符语言。

总而言之,它是:(i)之前完成和(ii)一个已知的较弱的想法。

于 2008-10-14T21:29:14.230 回答
7

这实际上是一个热门话题。

对于初学者 - 什么是人类可读的?

中国读者无法阅读俄语,反之亦然。如果您将您的领域缩小到例如中国药剂师编写一个处方,您可以围绕它设计一种语言。那将是人类可读的。

例如语言将属于领域特定语言的范畴。

于 2008-10-14T22:22:52.343 回答
7

SQL

SELECT name, address FROM customers WHERE region = 'Europe'
于 2009-03-20T10:47:34.943 回答
6

是的。它被称为COBOL,人们普遍讨厌它。

于 2008-10-14T20:57:08.087 回答
6

Inform 7是我见过的最成功的此类系统。与此处其他答案中列出的较粗略的系统相比,它有两个优点:它适用于特别适合自然语言(交互式小说)的领域,并且它基于更多的计算语言学知识对输入代码进行了更出色的分析,而不仅仅是传统的恰好使用英语单词而不是大括号等的编程语言语法。

于 2008-10-14T21:43:48.757 回答
6

HyperTalk及其后代AppleScript的设计类似于英语。

于 2008-10-15T00:04:23.900 回答
5

Perl,有些人声称。

print "hello!" and open my $File, '<', $path or die "Couldn't open the file after saying hello!";
于 2008-10-14T20:53:16.190 回答
5

用谷歌搜索“自然语言编程”,你会发现很多信息(包括为什么这是一个坏主意)。

于 2008-10-14T20:54:57.137 回答
5

表达的清晰很重要。

但思路清晰远非常重要。

于 2008-10-14T21:38:07.317 回答
4

VB是我能想到的最接近的一个:

If MyLife.Sucks Then MyLife.End Else MyLife.Continue

于 2008-10-14T20:54:54.203 回答
4

当然,二郎。

-module(listsort).
-export([by_length/1]).

 by_length(Lists) ->
    F = fun(A,B) when is_list(A), is_list(B) ->
            length(A) < length(B)
        end,
    qsort(Lists, F).

 qsort([], _)-> [];
 qsort([Pivot|Rest], Smaller) ->
     qsort([ X || X <- Rest, Smaller(X,Pivot)], Smaller)
     ++ [Pivot] ++
     qsort([ Y ||Y <- Rest, not(Smaller(Y, Pivot))], Smaller).

我是人类,它是一种编程语言,我可以阅读它。我不知道它是什么意思,但我认为那里有很多英文单词。

(舌头紧紧地贴在脸颊上。)

于 2008-10-15T15:02:13.870 回答
4

DSL 看起来非常自然。请参阅使用MGrammar创建的此示例

test "Searching google for watin"
    goto "http://www.google.se"
    type "watin" into "q"
    click "btnG"
    assert that text "WatiN Home" exists
    assert that element "res" exists
end
于 2008-11-13T19:03:57.113 回答
3

COBOL旨在供管理人员阅读,并且具有“干扰词”以使其更具可读性。

有趣的是,它读起来有点像冗长的 DSL。

于 2008-10-14T20:59:50.733 回答
3

比大多数人更易于阅读是 Ada 的早期卖点之一。这些天我觉得这是一个愚蠢的论点,因为任何语言的任何足够复杂的任务需要有能力的从业者才能理解。但是,它确实击败了 C 语法语言。它的主要编码风格也可以增强这种效果。例如,比较 if 语句中的循环: Ada:

if Time_To_Loop then
   for i in Some_Array loop
      Some_Array(i) := i;
   end loop;
end if;

C:

if (timeToLoop != 0) {
   for (int i=0;i<SOME_ARRAY_LENGTH;i++) {
      someArray[i] = i;
   }
}

如果我使用像微软这样的匈牙利符号,C 代码看起来会更糟,但我正在努力变得更好。:-)

于 2008-11-13T19:36:19.373 回答
3

有趣的问题。您的问题可以被解读为“是否有任何人类易于阅读的编程语言?”,或者 ELSE 为“是否有可用于编程的人类语言?”。这里所有的答案都集中在前者,所以让我尝试回答后者。

你听说过梵文吗?它是一种古老的印度语言,现代印度语言如印地语是基于它的。

维基/梵文

多年来,我一直听说它足够精确和完整,可以作为计算机上的高级语言使用。当然,您需要一个编译器来将梵文指令转换为机器语言。我知道剧本,是的,它很精确(完全是拼音,所以你永远不必问“你是怎么拼写的”),但我不太了解语法。

这完全是轶事,所以我不保证它的准确性。只是想分享我对此的了解。:-)

于 2010-09-29T14:41:16.977 回答
2

我同意这里的普遍共识。“人类可读”的通用编程语言大多是一个坏主意,但人类可读的领域特定语言非常值得。

REBOL 有一个很棒的系统来创建 DSL。

于 2008-10-15T02:43:23.080 回答
2

研究生

它只有一个语句:“你 - 给我写一个程序来做 x”
它对 X 的所有值都有效,并且具有不需要定义 x 并且可以在编写程序后更改的优点。

有一种商业方言叫做实习生:开发成本较低,但不能保证有效

于 2010-07-20T02:46:15.690 回答
1

Cobol有点像这样。

于 2008-10-14T20:55:31.223 回答
1

恕我直言,人类可读性是相当主观的。但是,如果您想了解更多信息,我建议您探索以下主题:

  • Python - 它使用更喜欢空格而不是“特殊字符”(例如 { & } 用于语法)。
  • Smalltalk - 允许通过方法名称传播参数。
  • 红宝石
  • 流利的 API / 领域特定语言
于 2008-10-14T21:02:24.797 回答
1

虽然它本身不是一种编程语言,但简约的 XML 速记语言 (PXSL)使 XSL 比它已经可以说的更易于人类阅读(而且更简洁!):

 <doc keywords="x y z">          doc -keywords=<<x y z>>
  <title/>                        title
  <body id="db13">                body -id=db13
    This is text.                   <<This is text.>>
  </body>
</doc>
于 2008-10-14T21:55:23.787 回答
1

我认为这两种结构有非常不同的目的。自然语言有一个非常松散的结构,需要解释,并假定存在一个高级推理引擎来理解它——并且预计它会在很大一部分时间被错误地解释!编程语言应该是精确的、明确的规范,几乎没有任何解释的余地​​。

鉴于您认为使用自然语言作为编程结构应该是驯服其可变性并阐明其含义的简单问题。但是一旦你完成了这些,你就剩下了编程语言的语义,不管它是如何在语法上包装和包装的。

于 2008-10-15T13:59:55.760 回答
1

那必须是空格。唯一无需阅读的编程语言:http://en.wikipedia.org/wiki/Whitespace_(programming_language)

于 2008-11-13T19:21:38.700 回答
1

有趣的。想象一个字母表问“有人类可读的报纸吗?”。

在你可以阅读之前,你必须先学会阅读。

于 2009-03-20T10:24:20.883 回答
1

还没有看到ABC提到过。在乌得勒支大学计算机科学专业的第一年就与它一起工作,并且一直认为它非常“人类可读”(无论这意味着什么)。

这是一个示例函数词,用于收集文档中所有词的集合:

   HOW TO RETURN words document:
      PUT {} IN collection
      FOR line IN document:
         FOR word IN split line:
            IF word not.in collection:
               INSERT word IN collection
      RETURN collection
于 2009-03-31T13:37:03.247 回答
1

你看过 Python 吗?

于 2010-08-02T07:34:51.440 回答
0

Visual Basic(以及一般基于 BASIC 的语言)与您所获得的人类语言一样接近。我认为 Python 也非常接近。如果你足够关心,使用这些你可以让你的代码读成结构化的英语,但是不,没有自然的英语编译器,因为那里有太多的歧义。

于 2008-10-14T20:55:24.080 回答
0

Basic 是朝这个方向发展的第一种方法,正如在另一个回复中所显示的那样,Perl 还允许使用非常接近人类语言的代码——如果你忽略所有这些标点符号。

我刚刚阅读了一篇关于如何将拉丁语翻译成 Perl的非常有趣的文章(其中还有一个 Perl 模块)。

因此,如果人类语言具有足够的结构,并且您引入了足够的限制以避免歧义,那么您确实可以(大部分)使用人类语言进行编程。

但实际上没有人真正做到这一点,因为它非常冗长,而且很难使其既可读又准确。

于 2008-10-14T20:58:49.453 回答
0

为什么要这么做?它对我们大脑中的 R2D2 机器不友好,它会向我们读取代码。

于 2008-10-14T21:00:53.913 回答
0

在早期,微软实际上翻译了WordBasic(多年来被称为Visual Basic for Applications)以匹配 GUI 语言。像这样的构造

If <condition> Then
  <something>
End If

在 Word 的荷兰语版本中,会像这样输入和显示

Als <condition> Dan
  <something>
Einde Als

当然,理论上这让人们更容易理解录制的宏。但我怀疑那些人会从一开始就看一下代码......

于 2009-03-29T14:03:53.370 回答
0

有很多很棒的DSL(领域特定语言)读起来很像人类语言。

一个很好的例子是星巴克。你可以写一个这样的DSL。这是使用 Ruby,但可以用许多不同的语言完成。Ruby 或 Python 的优势在于它们是动态语言,因此您可以使用 Duck Typing。



venti = Starbucks.new(:kind => :coffee, :size => :venti)
half_foam_venti = add_half_foam(venti)
serve(half_foam_venti)


但我不得不同意 Ruby / Python 可能是最接近开箱即用的。

肯特

于 2009-03-29T14:14:38.290 回答
0

我说 LOLcode 是为了可读性:

我有一个 VAR ITZ “海德世界”,我已经结束了

可见 VAR

GIMMEH结束

KTHXBYE

或者

我已经结束了

可见“海德世界2.0”

GIMMEH结束

KTHXBYE

“w/o gimmeh,这东西只会停留一瞬间”去 lolcode.com 获取 moar 信息

于 2009-04-05T14:12:01.807 回答
0

我曾经能够“阅读” OS/360 目标代码,这是一个在凌晨 2 点进行转储分析的人才,而 OP 经理在后台踱步。

所以我认为 OBJECT 代码算作人类可读的。

“自然语言”代码的主要问题是它们可能非常模棱两可。英语尤其依赖于文化、语境和“情绪”来正确解释句子。这就是为什么法律文件是用一种奇怪的生硬语言编写的,这是用英语达到任何精确度的唯一方法。

这是 COBOL 的一大陷阱。'IF A NOT = B OR C' 的编译器解释与普通读者的解释完全相反,即在 C "!(A == B) || A == C" 中,而您可能认为它应该是 !(A = = B || A == C)。

另一个大问题是标点符号。你的大脑“预处理”标点符号,所以你并没有真正“看到”它有意识的水平。时期 '。' 在早期的 COBOL 中非常重要,因为它们分隔了代码块,但是缺少或额外的句点非常难以发现。它有点像在 C 中发现 '=' 与 '==' 的区别,但要糟糕得多。

于 2009-09-22T02:13:05.473 回答
0

我想你可能指的是函数式编程?我认为 F# 是 1。但作为开发人员,我似乎认为它对我来说更复杂

于 2009-09-22T02:17:52.123 回答
0

您应该阅读 Martin Fowler 关于Business-Readable DSLs的文章。

于 2009-09-22T02:23:30.570 回答
0

Windev 是一种非常简单易读的语言。 http://www.pcsoft.fr/windev/presentation.htm

于 2009-10-08T10:46:51.657 回答
0

Rebol 接近尾声

于 2009-10-14T06:10:12.263 回答
0

虽然我知道 COBOL(更接近我们...... SQL)可能很糟糕,但这些都是几十年前设计的。我还认为他们利用了关于“英语”编程语言的炒作,我认为他们在适当的语言分析方面做得还不够。我认为,如果优秀的程序员聚在一起分析语言并将其投入使用,我认为现在可以用英语编程(自然英语......语言)。这是一个大项目,但凭借我们拥有的计算能力,我很确定。换句话说,我不喜欢人们因为 COBOL 而放弃了类英语编程的想法。Cobol 是一种早期的编程语言,当时它的设计者决定以英语口语作为参考,因为他们不知道更好,他们不知道未来的复杂性,他们认为英语让它看起来很熟悉,也许它在营销材料上看起来也不错。我认为他们并没有真正努力让 COBOL 编译器阅读自然英语。如果现在认真努力从过去学习并完成一个适当的自然语言识别系统,那么我认为它可以工作 - 经过一段时间(很可能是几年)。假设这样,能够用简单的英语编程不是很好吗?当然,它必须是自学的(计算机必须即时学习)和交互的(计算机必须能够在用户感到困惑时要求用户在选择中进行选择)。如果现在认真努力从过去学习并完成一个适当的自然语言识别系统,那么我认为它可以工作 - 经过一段时间(很可能是几年)。假设这样,能够用简单的英语编程不是很好吗?当然,它必须是自学的(计算机必须即时学习)和交互的(计算机必须能够在用户感到困惑时要求用户在选择中进行选择)。如果现在认真努力从过去学习并完成一个适当的自然语言识别系统,那么我认为它可以工作 - 经过一段时间(很可能是几年)。假设这样,能够用简单的英语编程不是很好吗?当然,它必须是自学的(计算机必须即时学习)和交互的(计算机必须能够在用户感到困惑时要求用户在选择中进行选择)。

于 2010-07-20T02:31:17.603 回答
0

请查看西北工业大学研究与孵化中心的 网站 http://www.jumpulse.com以查看人类语言编程语言New,它专门以人类语言与用户进行交流。新是基于一个完全自动化的软件。它应该可供 10 岁及以上的人使用。

于 2011-11-08T14:43:09.163 回答
-1

PERL ;-)

于 2009-09-22T02:48:38.787 回答