คำถามติดแท็ก typing

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

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

2
ประเภทสากลเป็นประเภทย่อยหรือกรณีพิเศษของประเภทที่มีอยู่หรือไม่
ฉันต้องการที่จะรู้ว่าประเภทเชิงปริมาณแบบ :เป็นประเภทย่อยหรือ กรณีพิเศษของประเภทมีมีลายเซ็นเดียวกัน: T_e = \ มีอยู่ X: \ left \ {a \ in X, f: X → \ {T, F \} \ right \}T a = ∀ X : { a ∈ X , f : X → { T , F } } T e T e = …

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

1
ทำไมอัลกอริทึม Hindley-Milner จะไม่ให้ผลเช่น t1 -> t2
ฉันกำลังอ่านเกี่ยวกับอัลกอริทึมการพิมพ์ของ Hindley-Milnerในขณะที่เขียนการนำไปใช้และดูว่าตราบใดที่ตัวแปรทุกตัวถูกผูกไว้คุณจะได้รับประเภทอะตอมมิกหรือประเภทที่อาร์กิวเมนต์จะกำหนดประเภทสุดท้ายเช่นt1 -> t1หรือ(t1 -> t2) -> (t1 -> t2)ที่ไหนt1และt2เป็นตัวแปรประเภท ฉันไม่สามารถคิดวิธีที่คุณจะได้รับสิ่งที่ชอบt1 -> t2หรือง่ายๆt1ซึ่งฉันเข้าใจว่าหมายความว่าอัลกอริทึมเสียเนื่องจากไม่มีวิธีกำหนดประเภทของนิพจน์ที่แท้จริง คุณจะรู้ได้อย่างไรว่าคุณจะไม่ได้รับประเภทเช่นคนที่ "เสีย" เหล่านี้ตราบใดที่ตัวแปรทุกตัวถูกผูกไว้ ฉันรู้ว่าประเภทอัตราผลตอบแทนขั้นตอนวิธีการที่มีตัวแปร t1 -> t2แต่เหล่านี้ได้รับการแก้ไขเสมอเมื่อคุณผ่านการขัดแย้งกับการทำงานซึ่งจะไม่เป็นกรณีในการทำงานกับชนิด นี่คือเหตุผลที่ฉันต้องการทราบว่าเรารู้ได้อย่างไรว่าอัลกอริทึมจะไม่ให้ผลเช่นนั้น (ดูเหมือนว่าคุณจะได้รับประเภท "เสีย" ใน MLแต่ฉันถามเกี่ยวกับแคลคูลัสแลมบ์ดา)

1
การอนุมานแบบอิงข้อ จำกัด พร้อมข้อมูลพีชคณิต
ฉันกำลังทำงานกับภาษาที่ใช้แสดงออกของลำดับวงศ์ตระกูล ML ดังนั้นจึงจำเป็นต้องมีการอนุมานแบบตามธรรมชาติ> :) ตอนนี้ฉันกำลังพยายามที่จะขยายการแก้ปัญหาตามข้อ จำกัด ไปสู่ปัญหาประเภทอนุมานตามการใช้งานง่าย ๆ ใน EOPL (Friedman และ Wand) แต่พวกเขามีประเภทข้อมูลพีชคณิตขั้นตอนที่สวยงาม สิ่งที่ฉันมีจนถึงตอนนี้ทำงานได้อย่างราบรื่น; ถ้าการแสดงออกeคือa + b, e : Int, และa : Int b : Intถ้าeเป็นการแข่งขัน match n with | 0 -> 1 | n' -> n' * fac(n - 1)`, ฉันถูกต้องสามารถอนุมานได้ว่าt(e) = t(the whole match expression), t(n) = …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.