除了Python和前身之外,还有哪些其他编程语言使用缩进来定义代码块?[关闭]


12

Python非常著名地使用缩进来句法定义代码块。(请参阅《 Python语言参考》中的Compound语句)。在使用Python多年之后,我仍然对这种语法功能很感兴趣。

但是我想知道:除了Python及其“前身”(*)语言ABC之外 ,还有哪些其他编程语言使用缩进来定义代码块代码块在这里意味着“以某种方式被视为一个组成部分的多个语句”。

我对实用的编程语言特别感兴趣,但是深奥的语言可能也值得一提。


(*):“ Predecessor ”是我选择的单词,默认情况下是了解更好的单词。Python的创建者Guido van Rossum 在这样的采访中描述了Python和ABC关于缩进的关系:“ 分组的缩进选择在Python中不是一个新颖的概念;我是从ABC继承过来的。


15
我不认为“请给我提供具有功能X的编程语言列表”不是计算机科学的问题。
大卫·里希比

2
为什么呢,空白语言本身就需要对其核心表达方法进行适当的缩进。
penguin359 '19

1
即使不是严格意义上的编程语言,长格式YAML也可能值得一提,因为它可能是具有此功能的下一种最有可能的语言,供某些人在Python之后使用。
奥斯汀·海默加恩

1
@ penguin359我也想到了空白。这不是问题的答案,因为缩进实际上并不用于定义块。但这肯定是空白在整体上最重要的语言。
彼得-恢复莫妮卡

1
@DavidRicherby按属性分组(即分类)绝对是科学的一部分:例如,生物学StackExchange的一个有趣的问题可能是:“ 还有两只脚走路的动物什么? ”因此,我认为上述问题非常适合计算机科学StackExchange 。
halloleo

Answers:


23

维基百科上有大量使用越位规则1的语言:

  • 美国广播公司
  • o
  • 好友脚本
  • 眼镜蛇
  • CoffeeScript
  • 汇合
  • 咖喱
  • 长生不老药(, do:块)
  • 榆树
  • F#(如果#light "off"未指定)
  • 精灵
  • Haskell的(仅用于whereletdo,或case ... of子句时省略括号)
  • 通知7
  • ISWIM,引入规则的抽象语言
  • 实时脚本
  • 米兰达
  • 奈梅勒
  • 尼姆
  • occam
  • 正式版
  • 蟒蛇
  • 使用例如SRFI 119时的方案
  • 旋转
  • 加大码

1:我从来没有听过这个词。


2
越位规则是一个令人兴奋的发现!
halloleo

3
不知道这是您或Wikipedia理解的语言,但Makefile也使用缩进。
TheWildHealer

@TheWildHealer Wikipedia文章中还有一个部分包含非编程语言(包括Make,YAML,RST之类的东西)。我之所以没有引用,是因为OP询问了有关编程语言的问题。
Bergi

您说得对,下次我一定会睁开眼睛,谢谢。
TheWildHealer

10

有:ElmHaskell,其前身Miranda和其前身ISWIMYAML,其中空格对于语法至关重要,并且禁止使用制表符;OCCAMCoffee脚本Cokescript都是语言编译器的语言,以JavaScript为目标,而深奥的空白

还有一个Agda-交互式定理证明器,可能不是您想的那样,但是其词法分析器对空白非常敏感。
Makefile,它使用基于选项卡的意图收集目标。


1
Haskell语言也是Miranda的基础。
kne

1
阿格达有一个非常哈斯克尔的语法,并且是两个缩进和空格敏感:(x-y)是不是(x - y)),即使它可能不是“实用”足够的OP。

1
此外,CoffeeScript和鲜为人知的CokeScript
Bergi,

5
如果YAML很重要,那么我想Makefile也必须
Izkata的

1
还有PureScript
duplode

4

尽管语法和功能有限,但make可能符合您的描述,即使它可能与您的想法不符。

臭名昭著地指示其代码块(配方)具有特殊形式的空格:一个制表符。可以使用其他方法(例如,使用替代字符的GNU Make支持),但实际上很少使用。

悬停在边缘的另一个示例是Ansible剧本。它们在YAML中指定,而YAML在很大程度上取决于缩进。YAML不是一种编程语言,但是Ansible剧本可以视为特定于域的程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.