ห่อใจของฉันรอบสัญกรณ์คำนำหน้า?


10

ฉันกำลังอ่านเกี่ยวกับ LISP

ฉันเข้าใจว่าสัญกรณ์คำนำหน้าทำงานในระดับหนึ่ง แต่ฉันสงสัยว่ามีกลอุบายใด ๆ หรือไม่ที่จะทำให้ใช้งานง่าย


6
นอกเหนือจากการฝึกฝนคุณหมายถึงอะไร

RPL ของผู้ใช้คือรสชาติที่ฉันโปรดปรานของ LISP มันไม่มีแม้แต่วงเล็บ! en.wikipedia.org/wiki/RPL_(programming_language) ฉันพลาดการใช้ HP 50g :-(
Robbie

ตอนแรกมันดูเหมือนไม่ได้ใช้งานง่าย แต่ตอนนี้ฉันคิดว่ามันวิเศษมากและฉันก็อ่านหนังสือเป็นส่วนใหญ่ จริงๆแล้วมันเป็นวิธีที่เราพูด: "ผลรวมของ ... , ผลคูณของ ... " อย่างไรก็ตามมันต้องใช้การอ่านประเภทอื่น ตอนนี้คุณเพียงแค่ใช้โอเปอเรเตอร์กับอาร์กิวเมนต์ทั้งหมดแทนที่จะอ่านมันเป็นบรรทัด
ทำเครื่องหมาย C

เกิดอะไรขึ้นกับสัญลักษณ์นำหน้า? เกือบทุกภาษาใช้มัน การเรียกใช้ฟังก์ชั่นนั้นเป็นส่วนนำหน้าเสมอ
SK-logic

ไม่ได้จริงๆ "สัญชาตญาณ" นั้นเป็นสัญชาตญาณเพราะคุณได้เรียนรู้ในรูปแบบของการประชุมทางคณิตศาสตร์นานกว่า 20 ปีขึ้นไป เนื่องจาก LISP และภาษาอื่นเพียงไม่กี่ภาษาที่ใช้การประชุมนี้และคุณจะยังคงเรียนรู้อีกภาษาหนึ่งมากขึ้น และเรากำลังพูดถึงเฉพาะเกี่ยวกับการแสดงออกที่เรียบง่ายนี่ (2 + 3 ... วิธีที่คุณต้องการที่จะลอง "ครึ่งหน้า" ซับ :)?
โกง

คำตอบ:


6

การอ่านจากซ้ายไปขวาเป็นหลักเป็นภาษาพูดด้วยคำกริยาที่เหมาะสมสามารถช่วยได้ ตัวอย่างเช่น (+ 3 2) อาจเป็น "เพิ่มสามและสอง" ในกรณีทั่วไปมากขึ้นคุณสามารถพูดว่า "ดำเนินการ $ ใน $ operands" ใช้กับกรณีเดียวกัน: "ดำเนินการเพิ่มในสามและสอง"


คุณจะทำอะไรกับ( = 1 2 )และ( > 4 2 )
แม่น้ำวิเวียน

3
คุณต้องการใช้คำถามเชิงโวหาร :) เท่ากัน? (อะไร?), "1 และ 2! (เอิ่ม ... ไม่ ... )
Arafangion

@ RiceFlour (เฮ้ฉันโตมากินข้าวที่ทำจากแป้งข้าว - ฉันมีปัญหาเกี่ยวกับกลูเตน) ฉันจะอ่าน "หนึ่งเท่ากับสองหรือไม่" หรือ "ต่อไปนี้เท่ากันหรือไม่" ตัวดำเนินการที่มากกว่าและน้อยกว่านั้นไม่เป็นธรรมชาติในแบบนำหน้า แต่ฉันสงสัยว่าพวกมันถูกใช้บ่อยแค่ไหนในรหัส Lisp
มาร์กซี

7

เคล็ดลับ? เพื่ออะไร?

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


ผมยังไม่ได้อ่านแม้กระทั่งว่ามากของมัน แต่ตอนนี้ผมคิดว่ามันเป็นที่ยอดเยี่ยม ดูเหมือนว่าสมองของฉันเริ่มมีความรู้สึก "สัมผัส" เกือบเกี่ยวกับวงเล็บ ฉันคิดว่าความรู้สึกจะแหลมมากขึ้นเท่านั้น
ทำเครื่องหมาย C

5

คุณอาจคิดว่าเป็นการเรียกใช้ฟังก์ชัน:

(operator operand1 operand2 ...)

ไม่มีอะไรพิเศษเกี่ยวกับมัน หากคุณโอเวอร์โหลดโอเปอเรเตอร์ใน C ++ (และภาษาอื่น ๆ อีกมากมายที่อนุญาต) คุณมักจะต้องกำหนดฟังก์ชันประเภทนี้ด้วยวิธีดังกล่าว:

MyClass operator+(MyClass const& x, MyClass const& y);

ใช่นี่เป็นวิธีที่ฉันทำ หากคุณย้อนกลับไปดูการเรียกใช้เมธอดใน Java, C # ฯลฯ พวกเขาเพียงแค่นำหน้าสัญกรณ์ที่มีวงเล็บในตำแหน่งที่แตกต่างกันเล็กน้อย: MyMethod (arg1, arg2)
nlawalker

4

หลายภาษาใช้คำนำหน้าผสมมัดและแม้กระทั่ง postfix

เสียงกระเพื่อมเพียงใช้คำนำหน้าเท่านั้น - โดยค่าเริ่มต้น ถ้า sin (x) เป็นสัญชาตญาณจากคณิตศาสตร์แล้ว (sin x) อยู่ไม่ไกล ถ้าการเคลื่อนย้าย (dog, home) เป็นการเรียกขั้นตอนแบบดั้งเดิมจากนั้น Lisp จะเป็นเพียงแค่ (ย้าย dog home)

เสียงกระเพื่อมไม่ได้ทำให้ข้อยกเว้นสำหรับคณิตศาสตร์และถือว่า +, -, * และอื่น ๆ เช่นการเรียกฟังก์ชั่นสามัญ


2

เมื่อ (ในที่สุด) "ทุกอย่างเป็นการเรียกใช้งานฟังก์ชั่น" (หรือรูปแบบพิเศษหรือการขยายมาโครทั้งคู่มีการใช้ไวยากรณ์ของพื้นผิวของ "การเรียกใช้ฟังก์ชัน") ก็รู้สึกเป็นธรรมชาติ

ดังนั้นสำหรับ(= 1 2)ฉันอ่านว่า 'เรียกตัวเลขเท่ากับการเปรียบเทียบกับ 1 และ 2'

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