คำถามติดแท็ก programming-languages

คำถามที่เกี่ยวข้องกับการออกแบบการใช้งานและการวิเคราะห์ภาษาการเขียนโปรแกรม ไม่ใช่สำหรับคำถามเกี่ยวกับวิธีการตั้งโปรแกรมซึ่งไม่ได้อยู่ในหัวข้อในเว็บไซต์นี้

6
ความสัมพันธ์ระหว่างภาษาการเขียนโปรแกรมนิพจน์ทั่วไปและภาษาที่เป็นทางการคืออะไร
ฉันได้ดูคำตอบสำหรับคำถามนี้และดูเหมือนว่าทุกคนรู้คำตอบโดยปริยายยกเว้นฉัน สันนิษฐานว่าเป็นเพราะคนเพียงคนเดียวที่สนใจคือผู้ที่มีการศึกษาระดับอุดมศึกษาในเรื่อง ในทางกลับกันฉันถูกโยนลงไปลึกสุดเพื่อรับงานมัธยมปลาย คำถามของฉันคือภาษาการเขียนโปรแกรมเกี่ยวข้องกับภาษาทางการอย่างไร ทุกที่ที่ฉันอ่านมีบางสิ่งที่เรียงตามแนวของ "ภาษาที่เป็นทางการใช้เพื่อกำหนดไวยากรณ์ของภาษาโปรแกรม" ตอนนี้จากสิ่งที่ฉันสามารถรวบรวมได้ภาษาทางการเป็นชุดของกฎการผลิตที่ใช้กับชุดสัญลักษณ์เฉพาะ (ตัวอักษรของภาษา) กฎการผลิตเหล่านี้กำหนดชุดการแปลงเช่น: b -> a aaa->c สิ่งนี้สามารถนำไปใช้ได้เช่น: abab->aaaa aaaa-> ca เช่นเดียวกับบันทึกย่อหากเรากำหนดว่าตัวอักษรของภาษาทางการของเราคือ {a, b, c} จากนั้น a และ b ไม่ใช่เทอร์มินัลและ c เป็นเทอร์มินัลเนื่องจากไม่สามารถเปลี่ยนได้ (โปรดแก้ไขให้ฉันด้วยถ้าฉันผิด ที่). ถ้าอย่างนั้นจะใช้กับภาษาโปรแกรมได้อย่างไร บ่อยครั้งที่มีการระบุด้วยว่า regex ใช้ในการแยกภาษาในรูปแบบข้อความเพื่อให้แน่ใจว่าไวยากรณ์นั้นถูกต้อง มันสมเหตุสมผลแล้ว จากนั้นจะกล่าวว่า regex ถูกกำหนดโดยภาษาทางการ Regex ส่งคืนจริงหรือเท็จ (จากประสบการณ์ของฉันอย่างน้อย) ขึ้นอยู่กับว่าสถานะออโตมาต้าที่ จำกัด ซึ่งแสดงถึง regex มาถึงจุดเป้าหมายหรือไม่ เท่าที่ฉันเห็นมันไม่มีส่วนเกี่ยวข้องกับการเปลี่ยนแปลง * สำหรับการรวบรวมโปรแกรมนั้นฉันคิดว่าภาษาทางการจะสามารถแปลงรหัสให้เป็นรหัสระดับล่างได้อย่างต่อเนื่องในที่สุดก็ถึงการชุมนุมผ่านชุดกฎที่ซับซ้อนซึ่งฮาร์ดแวร์นั้นสามารถเข้าใจได้ นั่นคือสิ่งที่มาจากมุมมองที่สับสนของฉัน …

3
อะไรคือฟังก์ชั่นฉาก (แนวความคิด)?
ในบทความ CACM ที่ผ่านมา [1] ผู้เขียนนำเสนอการดำเนินงานสำหรับฟังก์ชั่นการจัดฉาก พวกเขาใช้คำศัพท์ราวกับว่าเป็นที่รู้จักกันดีและไม่มีการอ้างอิงใด ๆ ที่ดูเหมือนเป็นการแนะนำที่ชัดเจน พวกเขาให้คำอธิบายสั้น ๆ (เปลี่ยนการเน้นของฉันและหมายเลขอ้างอิงเปลี่ยนเป็น 22 ในต้นฉบับ) ในบริบทของการสร้างโปรแกรมการเขียนโปรแกรมแบบหลายขั้นตอน (MSP, การแสดงละครสั้น ๆ ) ที่จัดตั้งขึ้นตาม Taha และ Sheard [2] ช่วยให้โปรแกรมเมอร์อย่างชัดเจนการประเมินผลความล่าช้าของการแสดงออกโปรแกรมขั้นตอนภายหลัง (ดังนั้นการแสดงละครการแสดงออก) ขั้นตอนปัจจุบันได้อย่างมีประสิทธิภาพทำหน้าที่เป็นตัวสร้างรหัสที่ประกอบด้วย (และอาจดำเนินการ) โปรแกรมของขั้นตอนต่อไป อย่างไรก็ตาม Taha และ Sheard เขียน (เน้นที่เหมือง): โปรแกรมหลายขั้นตอนเป็นโปรแกรมที่เกี่ยวข้องกับการสร้างการรวบรวมและการประมวลผลโค้ดทั้งหมดที่อยู่ในกระบวนการเดียวกัน หลายภาษาแสดงโปรแกรมหลายขั้นตอน การจัดเตรียมและการเขียนโปรแกรมแบบหลายขั้นตอนจึงตอบสนองความต้องการโซลูชันทั่วไปที่ไม่ต้องจ่ายค่าโสหุ้ยการแปลขณะใช้งาน พวกเขามากกว่าที่จะอ้างถึงการอ้างอิงหลายงานที่ถูกกล่าวหาว่าแสดงให้เห็นว่าการแสดงละครมีประสิทธิภาพซึ่งแสดงให้เห็นว่าแนวคิดนั้นเก่ากว่า พวกเขาไม่ได้ให้การอ้างอิงสำหรับคำนั้น ๆ ข้อความเหล่านี้ดูเหมือนจะเป็นมุมฉากถ้าไม่ขัดแย้ง; บางทีสิ่งที่ Rompf และ Odersky เขียนเป็นแอพพลิเคชั่นที่ Taha และ Sheard เสนอ …

3
อะไรคือความสัมพันธ์ระหว่างหน้าที่ใน SML และทฤษฎีหมวดหมู่?
ตามความคิดเดียวกันกับคำกล่าวนี้โดยAndrej Bauerในคำตอบนี้ ชุมชน Haskell ได้มีการพัฒนาเทคนิคจำนวนหนึ่งแรงบันดาลใจจากทฤษฎีประเภทที่monadsเป็นที่รู้จักกันดีที่สุด แต่ไม่ควรจะสับสนกับmonads อะไรคือความสัมพันธ์ระหว่างfunctorsใน SML และfunctorsในทฤษฎีหมวดหมู่? เนื่องจากฉันไม่รู้เกี่ยวกับรายละเอียดของฟังก์ชั่นในภาษาอื่นเช่น Haskell หรือ OCaml หากมีข้อมูลที่มีค่ากรุณาเพิ่มหัวข้อสำหรับภาษาอื่นด้วย

2
ภาษาการเขียนโปรแกรมใด ๆ ใช้ฟังก์ชั่นวนซ้ำทั่วไปเป็นพื้นฐานหรือไม่?
นี่คือไร้เดียงสาและดังนั้นอาจเป็นคำถามที่ไม่ถูกต้องดังนั้นขออภัยล่วงหน้า! มุมมองของฉันคือว่าทัวริงเครื่องจักรสามารถถูกมองว่าเป็นพื้นฐานการคำนวณสำหรับภาษาโปรแกรมขั้นตอน / จำเป็น ในทำนองเดียวกันแลมบ์ดาแคลคูลัสเป็นพื้นฐานสำหรับภาษาโปรแกรมการทำงาน ฉันได้เรียนรู้เมื่อเร็ว ๆ นี้ว่าวิทยานิพนธ์โบสถ์ทัวริงยังแสดงให้เห็นความเท่าเทียมกันร่วมกันกับรูปแบบที่สามของการคำนวณ: recursive ฟังก์ชันทั่วไป มีภาษาการเขียนโปรแกรมที่ใช้สิ่งนี้เป็นรูปแบบการคำนวณหรือไม่? ถ้าไม่มีมีเหตุผลทางเทคนิคหรือไม่ เช่นนอกจาก "ยังไม่มีใครลองเลย"

8
ภาษาการเขียนโปรแกรมที่ทุกการแสดงออกเหมาะสม
ต่อคำแนะนำของฉันกำลัง reposting นี้จากกองมากเกิน เมื่อเร็ว ๆ นี้ฉันกำลังคิดเกี่ยวกับปัญหาต่อไปนี้ พิจารณารหัสสำหรับมาตรฐาน "Hello world!" โปรแกรม: main() { printf("Hello World"); } ตอนนี้การเปลี่ยนแปลงใด ๆ ในรหัสนี้จะทำให้ไร้ประโยชน์อย่างสมบูรณ์ในความเป็นจริงการเปลี่ยนแปลงเกือบทุกครั้งจะป้องกันโค้ดจากการรวบรวม ตัวอย่างเช่น: main(5 { printf("Hello World"); } ตอนนี้กับคำถามจริง มีภาษาการเขียนโปรแกรมหรือไม่ที่มีการรวมกันของสัญลักษณ์ต่าง ๆ ซึ่งก็คือทุก ๆ นิพจน์มีเหตุผลหรือไม่? ฉันลองคิดถึงวิธีแก้ปัญหาบางอย่างแล้วคิดหาสองวิธี: Postfix ที่มีจำนวนตัวแปร จำกัด โดยพื้นฐานแล้วตัวแปรทั้งหมดจะถูกกำหนดไว้แล้วก่อนที่คุณจะเขียนโค้ดใด ๆ และคุณต้องทำงานกับมัน ในทางทฤษฎีคุณสามารถดำเนินการตามอำเภอใจได้โดยสร้างห่วงโซ่ของโปรแกรมง่าย ๆ โดยแต่ละโปรแกรมจะให้ผลลัพธ์แก่ผู้อื่น รหัสสามารถเขียนเป็นชุดอักขระในเครื่องหมาย postfix; "Postfix" พร้อมกับสแต็กของตัวแปร ตัวแปรจะถูกเก็บไว้ในสแต็ก ทุกการดำเนินการใช้สองตัวแปรจากด้านบนและวางผลลัพธ์ไว้ในตำแหน่งของพวกเขา โปรแกรมจะสิ้นสุดลงเมื่อถึงการดำเนินการหรือตัวแปรสุดท้าย ส่วนตัวฉันเกลียดทั้งสองอย่างนี้ ไม่เพียง แต่จะถูก …

4
ตัวรวบรวมขยะจะหลีกเลี่ยงการล้นสแต็กได้อย่างไร
ดังนั้นฉันจึงคิดว่าตัวรวบรวมขยะทำงานอย่างไรและฉันคิดว่าเป็นปัญหาที่น่าสนใจ อาจเป็นไปได้ที่นักสะสมขยะจะต้องเข้าไปสำรวจสิ่งก่อสร้างทั้งหมดด้วยวิธีเดียวกัน พวกเขาไม่สามารถรู้สภาพอากาศที่กำลังสำรวจรายการที่เชื่อมโยงหรือต้นไม้ที่สมดุลหรืออะไรก็ตาม พวกเขาไม่สามารถใช้หน่วยความจำมากเกินไปในการค้นหา วิธีหนึ่งที่เป็นไปได้และวิธีเดียวที่ฉันสามารถคิดให้สำรวจโครงสร้างทั้งหมดอาจเป็นเพียงเพื่อสำรวจโครงสร้างเหล่านั้นทั้งหมดในแบบที่คุณทำกับต้นไม้ไบนารี อย่างไรก็ตามเรื่องนี้จะให้สแต็คล้นในรายการที่เชื่อมโยงหรือแม้กระทั่งเพียงต้นไม้ไบนารีที่สมดุลต่ำ แต่ภาษาที่เก็บขยะทั้งหมดที่ฉันเคยใช้ดูเหมือนจะไม่มีปัญหาในการจัดการกับกรณีดังกล่าว ในหนังสือมังกรใช้คิว "Unscanned" แปลก ๆ โดยพื้นฐานแล้วแทนที่จะเข้าไปในโครงสร้างแบบวนซ้ำมันก็แค่เพิ่มสิ่งที่ต้องทำเครื่องหมายคิวมากเกินไปและจากนั้นสำหรับแต่ละสิ่งที่ไม่ได้ทำเครื่องหมายในตอนท้ายมันจะถูกลบ แต่คิวนี้จะไม่ใหญ่หรือไม่ ดังนั้นนักสะสมขยะจะสำรวจโครงสร้างโดยพลการอย่างไร? เทคนิคการสำรวจเส้นทางนี้จะหลีกเลี่ยงการล้นได้อย่างไร

10
สามารถใช้ภาษาแอสเซมบลีสากลสำหรับคอมพิวเตอร์ทุกเครื่องได้หรือไม่
ฉันอยากถามคำถามสองสามข้อเกี่ยวกับภาษาแอสเซมบลี ความเข้าใจของฉันคือว่ามันใกล้เคียงกับภาษาเครื่องทำให้เร็วขึ้นและมีประสิทธิภาพมากขึ้น เนื่องจากเรามีสถาปัตยกรรมคอมพิวเตอร์ที่แตกต่างกันนั่นหมายความว่าฉันต้องเขียนโค้ดที่แตกต่างกันในแอสเซมบลีสำหรับสถาปัตยกรรมที่แตกต่างกันหรือไม่? ถ้าเป็นเช่นนั้นทำไมแอสเซมบลีไม่เขียนหนึ่งครั้ง - เรียกใช้ภาษาทุกที่? จะไม่ง่ายกว่าที่จะทำให้เป็นสากลเพื่อให้คุณเขียนเพียงครั้งเดียวและสามารถเรียกใช้บนเครื่องที่มีการตั้งค่าที่แตกต่างกันได้ (ฉันคิดว่ามันคงเป็นไปไม่ได้ แต่ฉันต้องการคำตอบที่เป็นรูปธรรมและลึกซึ้ง) บางคนอาจบอกว่า C เป็นภาษาที่ฉันต้องการ ฉันไม่เคยใช้ C มาก่อน แต่ฉันคิดว่ามันยังคงเป็นภาษาระดับสูงถึงแม้ว่าอาจจะเร็วกว่า Java เช่นกัน ฉันอาจจะผิดที่นี่

3
การจัดประเภทของระบบพิมพ์ (แข็งแรง / อ่อน, ไดนามิก / คงที่)
กล่าวโดยย่อ: ระบบการจำแนกประเภทเป็นอย่างไรในบริบททางวิชาการ โดยเฉพาะอย่างยิ่งฉันสามารถหาแหล่งที่มีชื่อเสียงที่สร้างความแตกต่างระหว่างระบบประเภทที่แตกต่างกันได้อย่างไร ในความรู้สึกความยากลำบากของคำถามนี้ไม่ใช่ว่าฉันไม่สามารถหาคำตอบได้ แต่ฉันสามารถค้นหาได้มากเกินไปและไม่มีใครโดดเด่นเท่าที่ควร พื้นหลังฉันพยายามปรับปรุงบทความใน Haskell wiki เกี่ยวกับการพิมพ์ซึ่งในปัจจุบันอ้างว่ามีความแตกต่างดังต่อไปนี้: ไม่มีการพิมพ์: ภาษาไม่มีความคิดประเภทหรือจากมุมมองที่พิมพ์: มีประเภทเดียวในภาษา ภาษาแอสเซมบลีมีชนิด 'รูปแบบบิต' เท่านั้น Rexx และ Tk มีเฉพาะชนิด 'ข้อความ' แกน MatLab มีเฉพาะ 'เมทริกซ์ที่ซับซ้อนที่มีมูลค่า' ประเภท การพิมพ์ที่อ่อนแอ: มีประเภทที่แตกต่างเพียงไม่กี่ประเภทและอาจเป็นคำพ้องความหมายสำหรับหลายประเภท เช่น C ใช้ตัวเลขจำนวนเต็มสำหรับ booleans, จำนวนเต็ม, ตัวอักษร, ชุดบิตและการแจกแจง การพิมพ์ที่แข็งแกร่ง: ชุดเม็ดเล็กแบบละเอียดเช่นในภาษา Ada, ภาษา Wirthian (Pascal, Modula-2), Eiffel ทั้งหมดนี้ขัดกับการรับรู้ส่วนบุคคลของฉันซึ่งเป็นไปตาม: การพิมพ์ที่อ่อนแอ: ออบเจ็กต์มีประเภท แต่จะถูกแปลงเป็นประเภทอื่นโดยปริยายเมื่อบริบทต้องการ ยกตัวอย่างเช่น Perl, PHP และ …

1
ลูป do-while เพียงพอสำหรับทัวริงครบถ้วนหรือไม่
ฉันรู้ว่าในภาษาการเขียนโปรแกรมที่จำเป็นห่วงในขณะที่ทำก็เพียงพอในการสร้างโฟลว์การควบคุมเพื่อสร้างภาษาทัวริงที่สมบูรณ์ (เท่าที่โฟลว์การควบคุมดำเนินไป . ส่วนสำคัญของคำถามของฉันคือ: วนรอบในขณะที่ทำมีอำนาจการคำนวณเช่นเดียวกับวนรอบขณะทำ? กล่าวอีกนัยหนึ่งคือภาษาทัวริงจะสมบูรณ์หากไม่สามารถข้ามคำแนะนำทั้งหมดได้ ฉันรู้ว่าความหมายบางอย่างของที่นี่อาจจะคลุมเครือเล็กน้อยดังนั้นขอให้ฉันวลีคำถามจริงด้วยตัวอย่างเฉพาะ: Brainfuck (BF) เป็น Turing tarpit ที่มีการควบคุมการไหลเพียงลูปแบบ while-do ซึ่งแสดงว่า[...](มีสเป็คภาษาสมบูรณ์ที่ด้านล่างของคำถามในกรณีที่คุณไม่คุ้นเคยกับ Brainfuck) ลองกำหนด * ภาษา BF ใหม่ที่,.+-<>มีความหมายเช่นเดียวกับใน BF แต่แทนที่จะ[]เรามี{}ซึ่งหมายถึงการทำในขณะที่ห่วง นั่นคือความแตกต่างเพียงอย่างเดียวของ BF คือว่าทุกลูปจะถูกดำเนินการอย่างน้อยหนึ่งครั้งก่อนที่จะข้ามการทำซ้ำต่อไป BF * ทัวริงเสร็จสมบูรณ์หรือไม่ ถ้าเป็นเช่นนั้นฉันจะสนใจว่าฉันจะแปล BF เป็น BF * ได้อย่างไร ถ้าไม่ใช่ฉันจะพิสูจน์ได้อย่างไร ข้อสังเกตของฉัน: ไม่ใช่ทุกโปรแกรม BF ที่สามารถแปลเป็น BF * ตัวอย่างเช่นเป็นไปไม่ได้ที่จะเขียนโปรแกรมใน BF * ซึ่งอาจจะหรืออาจไม่อ่านหรือพิมพ์ค่า - หากโปรแกรมอาจพิมพ์ค่าหนึ่งค่าหรือมากกว่านั้นมันจะพิมพ์อย่างน้อยหนึ่งค่าเสมอ อย่างไรก็ตามอาจมีชุดย่อยของทัวริงที่สมบูรณ์ซึ่งสามารถแปลเป็น BF …

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

6
ความแตกต่างระหว่างภาษาสคริปต์และภาษาโปรแกรมปกติคืออะไร
ภาษาการเขียนโปรแกรมและภาษาสคริปต์แตกต่างกันอย่างไร ตัวอย่างเช่นพิจารณา C กับ Perl ความแตกต่างเพียงอย่างเดียวที่ภาษาสคริปต์ต้องการเพียงล่ามและไม่ต้องการการรวบรวมและการลิงก์?

7
ตัวอย่างของความไม่สอดคล้องและความไม่สมบูรณ์ใน Unix / C คืออะไร
ในบทความที่โด่งดังของ Richard Gabriel เรื่องThe Rise of Worse is Betterเขาได้เปรียบเทียบกับปรัชญาการออกแบบของ MIT / Stanford (Lisp) และ New Jersey (C / Unix) ตามแนวแกนของความเรียบง่ายความถูกต้องความสอดคล้องและความสมบูรณ์ เขายกตัวอย่างของ "ปัญหาผู้แพ้ PC" ( พูดถึงที่อื่นโดย Josh Haberman ) เพื่อยืนยันว่า Unix ให้ความสำคัญกับความเรียบง่ายของการใช้งานมากกว่าความเรียบง่ายของอินเตอร์เฟส อีกตัวอย่างหนึ่งที่ฉันคิดขึ้นมาก็คือแนวทางที่แตกต่างกับตัวเลข เสียงกระเพื่อมสามารถแสดงตัวเลขขนาดใหญ่โดยพลการ (ขึ้นอยู่กับขนาดของหน่วยความจำ) ในขณะที่ C จำกัด ตัวเลขไว้ที่จำนวนบิตคงที่ (โดยทั่วไปคือ 32-64) ฉันคิดว่านี่แสดงให้เห็นถึงแกนความถูกต้อง ตัวอย่างบางประการของความสอดคล้องและความสมบูรณ์มีอะไรบ้าง นี่คือคำอธิบายทั้งหมดของ Gabriel (ซึ่งเขายอมรับว่าเป็นการ์ตูนล้อเลียน): วิธีการของ MIT / Stanford ความเรียบง่าย …

3
เมื่อใดที่การจำลองทั้งสองไม่ได้เป็นการแบ่งครึ่ง
เมื่อได้รับการเปลี่ยนระบบ โดยที่คือชุดของรัฐเป็นชุดของป้ายกำกับและเป็นความสัมพันธ์แบบไตรภาค ตามปกติการเขียนสำหรับ(P,การเปลี่ยนเลเบลแสดงว่าระบบในสถานะเปลี่ยนสถานะเป็นด้วยเลเบลซึ่งหมายความว่าเป็นการกระทำที่สังเกตได้ซึ่งทำให้เกิดการเปลี่ยนแปลงสถานะS Λ → ⊆ S × Λ × S P α → Q ( P , α , Q ) ∈ → P α →คิวพีคิวα α( S, Λ , → )(S,Λ,→)(S,\Lambda,\to)SSSΛΛ\Lambda→ ⊆ S× Λ × S→⊆S×Λ×S\to\subseteq S\times\Lambda\times Sp →αQp→αqp \stackrel\alpha\rightarrow q( p , α , q) ∈ →(p,α,q)∈→(p,\alpha,q)\in\top …

3
ฟังก์ชัน ML ของประเภท 'a ->' b
อาจารย์ของเราขอให้เราคิดถึงฟังก์ชั่นใน OCaml ที่มีรูปแบบ 'a -> 'b เช่นฟังก์ชั่นของอาร์กิวเมนต์หนึ่งตัวที่อาจเป็นอะไรก็ได้และสามารถคืนสิ่งที่แตกต่างออกไปได้ ฉันคิดว่าจะใช้raiseในฟังก์ชั่นที่ไม่สนใจอาร์กิวเมนต์: let f x = raise Exit แต่อาจารย์กล่าวว่ามีวิธีแก้ปัญหาที่ไม่ต้องการฟังก์ชันใด ๆ ในไลบรารีมาตรฐาน ฉันสับสน: คุณจะสร้างได้'bอย่างไรถ้าคุณไม่มีในตอนแรก ฉันถามที่นี่มากกว่า Stack Overflow เพราะฉันต้องการที่จะเข้าใจสิ่งที่เกิดขึ้นฉันไม่ต้องการเพียงแค่เห็นโปรแกรมที่ไม่มีคำอธิบาย

2
อัลกอริทึมการตรวจสอบประเภท
ฉันเริ่มต้นการวิจัยบรรณานุกรมส่วนบุคคลเกี่ยวกับอัลกอริทึมการตรวจสอบประเภทและต้องการคำแนะนำ อัลกอริทึมการตรวจสอบประเภทกลยุทธ์และเทคนิคทั่วไปที่ใช้มากที่สุดคืออะไร? ฉันสนใจอัลกอริทึมการตรวจสอบประเภทที่ซับซ้อนโดยเฉพาะอย่างยิ่งในภาษาที่พิมพ์แบบคงที่ที่รู้จักกันอย่างกว้างขวางเช่น C ++, Java 5+, Scala หรืออื่น ๆ IE, อัลกอริทึมการตรวจสอบประเภทที่ไม่ง่ายมากเนื่องจากการพิมพ์ภาษาพื้นฐานง่าย ๆ (เช่น Java 1.4 และต่ำกว่า) ฉันไม่สนใจภาษาที่เฉพาะเจาะจง X, Y หรือ Z ฉันสนใจในการตรวจสอบอัลกอริทึมโดยไม่คำนึงถึงภาษาที่พวกเขากำหนดเป้าหมาย หากคุณให้คำตอบเช่น "ภาษา L ที่คุณไม่เคยได้ยินเกี่ยวกับสิ่งที่พิมพ์อย่างยิ่งและการพิมพ์มีความซับซ้อนมีอัลกอริทึมการตรวจสอบประเภทที่ A, B และ C โดยการตรวจสอบ X และ Y โดยใช้อัลกอริทึม Z" หรือ " กลยุทธ์ X และ Y ที่ใช้สำหรับ Scala และตัวแปร Z ของ A ที่ใช้สำหรับ …

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