ภาษาโปรแกรมอื่นใดนอกเหนือจาก Python และรุ่นก่อนโดยใช้การเยื้องเพื่อกำหนดบล็อคโค้ด [ปิด]


12

งูใหญ่ค่อนข้างมีชื่อเสียงใช้เยื้องไปsyntacticallyกำหนดกลุ่มของรหัส (ดูคำสั่งผสมในการอ้างอิงภาษา Python) หลังจากใช้ Python มาหลายปีฉันยังคงรู้สึกสนใจและชอบคุณสมบัติทางไวยากรณ์นี้มาก

แต่ฉันสงสัยว่า: นอกเหนือจาก Python และภาษา "ก่อนหน้า" (*) ABC แล้ว ซึ่งภาษาการเขียนโปรแกรมอื่น ๆ นั้นมีการใช้การเยื้องสำหรับคำนิยามของบล็อกรหัส ? การบล็อกโค้ดหมายถึง "ข้อความสั่งหลายรายการซึ่งในทางใดทางหนึ่งถือว่าเป็นองค์ประกอบเดียว"

ฉันสนใจภาษาการเขียนโปรแกรมเชิงปฏิบัติเป็นพิเศษ แต่ภาษาลึกลับอาจจะคุ้มค่าที่จะกล่าวถึงเช่นกัน


(*): " ผู้บุกเบิก " คือตัวเลือกของคำในค่าเริ่มต้นของการรู้ว่าที่นี่ดีกว่า Guido van Rossum ผู้สร้าง Python อธิบายความสัมพันธ์ระหว่าง Python และ ABC เกี่ยวกับการเยื้องในการสัมภาษณ์แบบนี้: " ทางเลือกของการเยื้องสำหรับการจัดกลุ่มไม่ใช่แนวคิดใหม่ใน Python; ฉันได้รับสิ่งนี้จาก ABC "


15
ฉันไม่คิดว่า "โปรดให้รายชื่อภาษาการเขียนโปรแกรมพร้อมฟีเจอร์ X" เป็นคำถามวิทยาศาสตร์คอมพิวเตอร์
David Richerby

2
ทำไมมีภาษาของWhitespaceที่ต้องการการเยื้องที่เหมาะสมสำหรับมันเป็นวิธีการหลักในการแสดงออก
penguin359

1
YAML ที่มีรูปทรงยาวน่าจะคุ้มค่าที่จะกล่าวถึงแม้ว่าจะไม่ใช่ภาษาการเขียนโปรแกรมในความหมายที่เข้มงวดที่สุด แต่ก็อาจเป็นหนึ่งในภาษาที่มีโอกาสมากที่สุดถัดไปที่มีคุณสมบัตินี้สำหรับผู้ที่จะได้พบกับ Python
Austin Hemmelgarn

1
@ penguin359 ฉันก็นึกถึงช่องว่าง มันไม่ได้เป็นคำตอบสำหรับคำถามเพราะการเยื้องคือ afaict ไม่ได้ใช้เพื่อกำหนดบล็อก แต่แน่นอนว่ามันเป็นภาษาที่พื้นที่สีขาวมีความสำคัญมากที่สุด
ปีเตอร์ - Reinstate Monica

1
@DavidRicherby การจัดกลุ่มตามคุณลักษณะ (เช่นการจัดหมวดหมู่) เป็นส่วนหนึ่งของวิทยาศาสตร์อย่างแน่นอน: เช่นคำถามที่น่าสนใจสำหรับชีววิทยา StackExchange อาจเป็น: " สัตว์ชนิดใดที่เดินด้วยสองขา " ดังนั้นฉันจึงพิจารณาคำถามข้างต้นที่เหมาะสมมากสำหรับวิทยาการคอมพิวเตอร์ StackExchange .
halloleo

คำตอบ:


23

Wikipedia มีรายการภาษามากมายที่ใช้กฎนอก1 :

  • เอบีซี
  • หุยฮา
  • BuddyScript
  • งูเห่า
  • CoffeeScript
  • บรรจบ
  • แกง
  • Elixir ( , do:บล็อก)
  • ไม้ต้นจำพวก ulmus
  • F # (หาก#light "off"ไม่ได้ระบุไว้)
  • มาร
  • Haskell (เฉพาะwhere, let, doหรือcase ... ofคำสั่งเมื่อการจัดฟันจะถูกตัดออก)
  • แจ้ง 7
  • ISWIM ภาษานามธรรมที่แนะนำกฎ
  • LiveScript
  • มิแรนดา
  • Nemerle
  • สะเดา
  • สาธารณรัฐโคลัมเบีย
  • PROMAL
  • หลาม
  • แบบแผนเมื่อใช้เช่น SRFI 119
  • ปั่น
  • XL

1: ฉันไม่เคยได้ยินคำนี้มาก่อนเลย


2
กฎนอกคือการค้นหาที่น่าตื่นเต้น!
halloleo

3
ไม่รู้ว่าเป็นภาษาที่คุณหรือวิกิพีเดียเข้าใจหรือไม่ แต่ Makefiles ก็ใช้การเยื้องเช่นกัน
TheWildHealer

@TheWildHealer บทความวิกิพีเดียยังมีส่วนที่ไม่ใช่ภาษาโปรแกรม (รวมถึง Make, YAML, RST) ฉันไม่ได้พูดอย่างนั้นเพราะ OP ถามเกี่ยวกับภาษาการเขียนโปรแกรม
Bergi

คุณพูดถูกนะคราวหน้าฉันจะลืมตาขึ้นแน่
TheWildHealer

10

นอกจากนี้: เอล์ม , Haskell , บรรพบุรุษของมิแรนดาและบรรพบุรุษของมันISWIM , YAMLที่ช่องว่างที่มีความสำคัญสำหรับไวยากรณ์และแท็บเป็นสิ่งต้องห้ามสาธารณรัฐโคลัมเบีย , สคริปต์กาแฟและCokescriptทั้งสองภาษาคอมไพเลอร์ภาษาด้วย JavaScript เป็นเป้าหมายและลึกลับช่องว่าง

นอกจากนี้ยังมีทฤษฎีบทเชิงโต้ตอบของAgdaซึ่งอาจไม่ใช่สิ่งที่คุณมีในใจ แต่ lexer นั้นไวต่อพื้นที่สีขาวมาก
Makefileซึ่งรวบรวมเป้าหมายที่มีจุดประสงค์ตามแท็บ


1
มิแรนดาภาษาฮัสเคลมีพื้นฐานมาจาก
kne

1
Agda มีไวยากรณ์ที่คล้ายกับ Haskell มากและมีความอ่อนไหวต่อทั้งการเยื้องและช่องว่าง: (x-y)ไม่ใช่(x - y)) แม้ว่ามันอาจจะไม่ "เชิงปฏิบัติ" เพียงพอสำหรับ OP ก็ตาม
Chi

1
นอกจากนี้ CoffeeScript และ CokeScript ที่ไม่ค่อยเป็นที่รู้จัก
Bergi

5
ถ้า YAML นับฉันก็คิดว่าต้อง Makefiles ด้วย
Izkata

1
นอกจากนี้ยังมีPureScript
duplode

4

ทำให้เหมาะกับคำอธิบายของคุณแม้ว่ามันอาจจะไม่ใช่สิ่งที่คุณมีในใจด้วยไวยากรณ์และพลังที่ จำกัด

มันน่าอับอายบ่งชี้บล็อครหัส ( สูตร ) กับรูปแบบเฉพาะของช่องว่าง: อักขระแท็บหนึ่ง มีวิธีอื่น ๆ ให้เลือกใช้ (เช่นGNU Make สนับสนุนโดยใช้อักขระอื่น ) แต่ไม่ค่อยได้ใช้ในทางปฏิบัติ

ตัวอย่างเช่นโฉบที่ขอบก็คือplaybooks เบิ้ล พวกเขาระบุไว้ในYAMLซึ่งขึ้นอยู่กับการเยื้องอย่างมาก YAML ไม่ใช่ภาษาโปรแกรม แต่ playbooks Ansible ถือได้ว่าเป็นโปรแกรมเฉพาะโดเมน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.