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

2
โครงสร้างข้อมูลถาวรใดสำหรับชุดองค์ประกอบที่เรียงลำดับบางส่วน
ฉันต้องการจัดเก็บชุดองค์ประกอบของประเภท a ประเภทสั่งบางส่วนเพื่อเปรียบเทียบ1และ2สามารถกลับมามีขนาดเล็กมากขึ้นเท่ากันหรือหาที่เปรียบมิได้a1a1a_1a2a2a_2 ปัญหาอย่างหนึ่งของแฮชเทเบิลคือองค์ประกอบที่เท่ากันสองค่าสามารถนำเสนอได้แตกต่างกันและฉันไม่สามารถเข้าถึงฟังก์ชันการแฮชที่สอดคล้องกับความเท่าเทียมกันได้ การเปรียบเทียบองค์ประกอบสองรายการอาจเป็นกระบวนการที่มีความยาวดังนั้นจึงน่าสนใจที่จะลดการเปรียบเทียบให้น้อยที่สุด หากจำเป็นสามารถบันทึกการโทรไปยังผู้ดำเนินการเปรียบเทียบได้ ตอนนี้ฉันรู้แล้วว่าฉันจะต้องเก็บ antichains เท่านั้น (หรือสมมติว่าเป็นอย่างนั้น) แม่นยำมากขึ้นการดำเนินการที่ฉันจะต้องดำเนินการมีดังนี้: ลบองค์ประกอบออกจาก antichain; ลองเพิ่มองค์ประกอบ หากองค์ประกอบมีขนาดเล็กกว่าสมาชิกอย่าเพิ่มองค์ประกอบมิฉะนั้นให้เพิ่มและลบทุกองค์ประกอบที่เล็กกว่านั้น i1&lt;a&lt;i2i1&lt;a&lt;i2i_1 < a < i_2i3&lt;b&lt;i4i3&lt;b&lt;i4i_3 < b < i_4i2&lt;i3i2&lt;i3i_2 < i_3a&lt;ba&lt;ba < bi2≮i3i2≮i3i_2 \not< i_3a≮ba≮ba \not < b

2
ซิปคืออะไรและเกี่ยวข้องกับโครงสร้างเหมือนต้นไม้อย่างไร
ฉันกำลังอ่านบทหนึ่งในLYAHซึ่งไม่สมเหตุสมผลกับฉันจริงๆ ฉันเข้าใจว่ารูดซิปสามารถเข้าไปสำรวจโครงสร้างคล้ายต้นไม้ได้โดยพลการ แต่ฉันต้องการความกระจ่างเกี่ยวกับมัน นอกจากนี้ซิปยังสามารถวางนัยกับโครงสร้างข้อมูลใด ๆ ได้หรือไม่

1
เหตุใดภาษาการเขียนโปรแกรมที่ใช้งานได้จำเป็นต้องมีการรวบรวมขยะ
อะไรคือการหยุด ghc จากการแปล Haskell ไปเป็นภาษาการเขียนโปรแกรมที่ต่อกันเช่นตรรกะเชิงการรวมกันแล้วใช้การจัดสรรสแต็คสำหรับทุกสิ่ง ตามที่วิกิพีเดียการแปลจากแลมบ์ดาแคลคูลัสเป็นตรรกะเชิงตรรกะนั้นมีความสำคัญและภาษาการเขียนโปรแกรมที่ต่อกันสามารถพึ่งพากองซ้อนสำหรับการจัดสรรหน่วยความจำเพียงอย่างเดียว เป็นไปได้ไหมที่จะทำการแปลและกำจัดการเก็บขยะสำหรับภาษาเช่น Haskell และ ocaml มีข้อเสียในการทำเช่นนี้? แก้ไข: ย้ายมาที่นี่/programming/39440412/why-do-functional-programming-languages-require-garbage-collection

1
คำอธิบายทางคณิตศาสตร์ (หมวดหมู่) ของคลาสประเภท
ภาษาฟังก์ชั่นสามารถดูได้เป็นหมวดหมู่ที่วัตถุเป็นประเภทและ morphisms ทำงานระหว่างพวกเขา จะทำอย่างไรเรียนชนิดใส่ในรูปแบบนี้? ฉันคิดว่าเราควรพิจารณาการใช้งานเหล่านั้นตามข้อ จำกัด ที่คลาสประเภทส่วนใหญ่มี แต่ไม่ได้แสดงใน Haskell ตัวอย่างเช่นเราควรพิจารณาเฉพาะการใช้งานของผู้Functorที่และfmap id ≡ idfmap f . fmap g ≡ fmap (f . g) หรือมีรากฐานทางทฤษฎีอื่น ๆ สำหรับการเรียนประเภท (เช่นตามพิมพ์แลมบ์ดานิ)?

2
เทียบเท่ากับการทำงานอย่างหมดจดของ B-Tree
ฉันกำลังสำรวจความคิดในการเขียน DBMS ในลักษณะที่ใช้งานได้อย่างหมดจด โครงสร้างข้อมูลแบบดั้งเดิมที่ใช้สำหรับการทำดัชนีคือ B-Tree ฉันต้องการทราบถึงการทำงานที่เทียบเท่า B-Tree อย่างแท้จริงซึ่งจะได้รับการปรับปรุงเพื่อลดการเข้าถึงดิสก์ ขอบคุณ

3
การผสมแฮชที่เกี่ยวข้อง
พิจารณารายการที่มีการเชื่อมโยงต่ำมากในการตั้งค่าการทำงานอย่างหมดจด การสรรเสริญของมันได้รับการร้องจากยอดเขาและจะยังคงสูง ที่นี่ฉันจะพูดถึงหนึ่งในจุดแข็งและคำถามว่ามันจะขยายไปสู่ระดับที่กว้างขึ้นของลำดับการทำงานที่บริสุทธิ์โดยใช้ต้นไม้ ปัญหามีดังต่อไปนี้: คุณต้องการทดสอบความเท่าเทียมกันของโครงสร้างเกือบทั้งหมดในเวลา O (1) โดยใช้วิธีการแปลงแป้นพิมพ์ที่เข้มงวด หากฟังก์ชันแฮชคือการเรียกซ้ำแบบโครงสร้างเช่น hash (x: xs) = ผสม x (hash xs) ดังนั้นคุณสามารถแคชค่าแฮชของรายการอย่างโปร่งใสและอัปเดตในเวลา O (1) เมื่อองค์ประกอบถูกพิจารณาลงในรายการที่มีอยู่ . อัลกอริทึมส่วนใหญ่สำหรับรายการที่แปลงแป้นพิมพ์มีการวนซ้ำแบบโครงสร้างดังนั้นวิธีนี้จึงใช้งานได้อย่างเด่นชัด แต่สมมติว่าแทนที่จะเป็นรายการที่เชื่อมโยงโดยลำพังคุณมีลำดับต้นไม้ที่สนับสนุนการเชื่อมโยงความยาว O (n) สองลำดับในเวลา O (log n) สำหรับการแคชแฮชให้ทำงานที่นี่ฟังก์ชันการผสมแฮชจะต้องเชื่อมโยงเพื่อเคารพองศาอิสระของต้นไม้ที่แสดงถึงลำดับเชิงเส้นเดียวกัน มิกเซอร์ควรใช้ค่าแฮชของทรีย่อยและคำนวณค่าแฮชของทรีทั้งหมด นี่คือที่ฉันเมื่อหกเดือนที่แล้วเมื่อฉันใช้เวลาหนึ่งวันครุ่นคิดและค้นคว้าปัญหานี้ ดูเหมือนว่าจะไม่ได้รับความสนใจในวรรณกรรมเกี่ยวกับโครงสร้างข้อมูล ฉันเจออัลกอริธึมการแปลงรหัส Tillich-Zemor จากการเข้ารหัส มันอาศัยการคูณเมทริกซ์ 2x2 (ซึ่งเชื่อมโยง) โดยที่บิต 0 และ 1 สอดคล้องกับเครื่องกำเนิดไฟฟ้าสอง subalgebra ที่มีรายการในฟิลด์ Galois คำถามของฉันคือฉันพลาดอะไรไป จะต้องมีเอกสารที่เกี่ยวข้องทั้งในวรรณคดีเกี่ยวกับการเข้ารหัสและโครงสร้างข้อมูลที่ฉันไม่พบในการค้นหาของฉัน …

2
รายการความแตกต่างในการตั้งโปรแกรมการทำงาน
คำถามมีอะไรใหม่ในโครงสร้างข้อมูลที่ใช้งานได้จริงตั้งแต่ Okasaki? (และเมื่อเทียบกับการเขียนโปรแกรมเชิงตรรกะ) ซึ่งเป็นสิ่งที่ฉันสนใจเมื่อเร็ว ๆ นี้สิ่งนี้ทำให้ฉันค้นหาการใช้งานรายการความแตกต่างสำหรับ Haskell ฉันมีสองคำถาม (ยกโทษ / แก้ไขให้ฉันถ้าฉันควรทำให้พวกเขาสองคำถามที่แตกต่างกันใน StackExchange) คำถามง่ายๆคือทุกคนตระหนักถึงการพิจารณาทางวิชาการของรายการที่แตกต่างในการเขียนโปรแกรมการทำงานและ / หรือการใช้งานนอกเหนือจากหนึ่งในห้องสมุด Haskell? คำตอบของ jbapple ไม่ได้อ้างถึงรายการที่แตกต่าง (รายการความแตกต่างในการเขียนโปรแกรมเชิงตรรกะมีอยู่ในตำนานและในแหล่งข้อมูลสองแห่งที่ฉันมีอยู่แถว ๆ นี้ (TM) ก่อนที่จะค้นพบการใช้งาน Haskell ฉันไม่ทราบว่าแนวคิดนั้นเพิ่มขึ้นจากตรรกะไปจนถึงการเขียนโปรแกรมเชิงหน้าที่ จริงอยู่ที่รายการความแตกต่างของ Haskell นั้นเป็นฟังก์ชั่นการใช้งานตามลำดับขั้นสูงและทำงานแตกต่างจากฟังก์ชั่นการเขียนโปรแกรมแบบลอจิก แต่อินเทอร์เฟซคล้ายกันอย่างแน่นอน สิ่งที่น่าสนใจ (และไกลออกไป) ที่น่าสนใจยิ่งกว่าที่ฉันต้องการถามคือว่าขอบเขตบนแบบ asymptotic ที่อ้างสิทธิ์สำหรับไลบรารีรายการผลต่าง Haskell ดังกล่าวนั้นถูกต้องหรือน่าเชื่อถือ ความสับสนของฉันอาจจะเป็นเพราะฉันหายไปบางสิ่งบางอย่างเกี่ยวกับการที่ชัดเจนเกี่ยวกับเหตุผลที่ซับซ้อนด้วยความเกียจคร้าน แต่ขอบเขตอ้างว่าเพียง แต่จะทำให้รู้สึกถึงฉันถ้าเปลี่ยนตัวมากกว่าโครงสร้างข้อมูลขนาดใหญ่ (หรือการปิดหรือค้นหาตัวแปรหรือบางสิ่งบางอย่าง ) มักจะต้องใช้เวลาอย่างต่อเนื่อง หรือ "จับ" เพียงแค่ว่าไม่มีเวลา จำกัด สำหรับ "หัว" และ …

2
หมวดหมู่ทฤษฎีและตัวแยกวิเคราะห์ - ต้องการการอ้างอิง
เนื่องจากฉันสนใจนักแยกวิเคราะห์ การอ้างอิงใด ๆ เกี่ยวกับการประยุกต์ใช้ทฤษฎีหมวดหมู่กับการวิเคราะห์คำจะชื่นชมอย่างมาก ที่ดีที่สุด

2
การส่งผ่านการแปลงต่อเนื่องของฟังก์ชันไบนารี
เรียกคืนการแปลงสภาพต่อเนื่อง (การแปลง CPS) ซึ่งใช้ถึงβ A : = R R A (โดยที่คงที่R ) และf : A → Bถึงβ f : β A → β B ที่กำหนดโดย βAAAβA : = RRAβA:=RRA\beta A \mathrel{{:}{=}} R^{R^A}RRRฉ: A → Bf:A→Bf : A \to Bβฉ: βA → βBβf:βA→βB\beta f : \beta A \to \beta B ในความเป็นจริงเรามีmonad …

1
อะไรทำให้ภาษา (และระบบพิมพ์) สามารถพิสูจน์ทฤษฎีบทเกี่ยวกับเงื่อนไขของตนเองได้
ฉันเพิ่งพยายามใช้Cedille-Coreของ Aaron ซึ่งเป็นภาษาโปรแกรมมินิมอลลิสต์ที่สามารถพิสูจน์ทฤษฎีบทคณิตศาสตร์เกี่ยวกับเงื่อนไขของตัวเองได้ ฉันยังพิสูจน์การเหนี่ยวนำสำหรับประเภทข้อมูลที่เข้ารหัสบนซึ่งทำให้ชัดเจนว่าทำไมส่วนขยายของเขาจะมีความจำเป็น Nether น้อยกว่าฉันยังคงสงสัยว่าส่วนขยายเหล่านั้นมาจากไหน ทำไมพวกเขาเป็นสิ่งที่พวกเขา? อะไรที่ทำให้พวกเขาชอบธรรม ยกตัวอย่างเช่นฉันรู้ว่าส่วนขยายบางอย่างเช่นการเรียกซ้ำได้ทำลายภาษาซึ่งเป็นระบบสำหรับการพิสูจน์ ถ้าฉันตัดสินใจขยาย CoC ด้วย primitives อื่น ๆ ฉันจะปรับได้อย่างไร ฉันเข้าใจหลักฐานของการทำให้เป็นมาตรฐานเป็นสิ่งที่จำเป็น แต่นั่นไม่ได้พิสูจน์สิ่งดั้งเดิมว่า "เหมาะสม" ในระยะสั้นสิ่งที่มีคุณสมบัติพิเศษภาษา (และระบบชนิด) มีคุณสมบัติเป็นระบบที่สามารถพิสูจน์ทฤษฎีบทเกี่ยวกับเงื่อนไขของตัวเอง?

2
อะไรคือความสัมพันธ์ระหว่าง Alternative, MonadPlus (LeftCatch) และ MonadPlus (LeftDistributive)?
การติดตามตัวอย่างของ Monad ซึ่งเป็นทางเลือก แต่ไม่ใช่ MonadPlus คืออะไร : สมมติว่าเป็น monad อะไรคือความสัมพันธ์ betweem เมตรเป็นทางเลือกที่MonadPlusCatchและMonadPlusDistr ? mmmmmmสำหรับแต่ละคู่ที่เป็นไปได้ทั้งหกคู่นั้นฉันต้องการพิสูจน์ว่ามีนัยหนึ่งหรืออีกตัวอย่างหนึ่งที่ไม่เป็นเช่นนั้น (ฉันกำลังใช้ MonadPlusCatchเพื่อแยกความแตกต่างของMonadPlusที่เป็นไปตามกฎLeft-Catch : mplus (return a) b = return a MonadPlusDistrเพื่อแยกความแตกต่างของMonadPlusที่ทำให้กฎการกระจายซ้าย : mplus a b &gt;&gt;= k = mplus (a &gt;&gt;= k) (b &gt;&gt;= k) ดูMonadPlus บน HaskellWiki ) ความรู้และสัญชาตญาณปัจจุบันของฉันคือ: MonadPlusDist ทางเลือก - น่าจะเป็นจริง - ดูเหมือนว่าตรงไปตรงมาฉันเชื่อว่าฉันมีร่างของหลักฐานฉันจะตรวจสอบและถ้ามันถูกต้องฉันจะโพสต์มัน …

2
ต้นไม้ที่สมดุลง่าย ๆ กับ O (1) concat
ในกรณีที่เลวร้ายที่สุดในการทำงานอย่างหมดจดเวลาคงรายการที่เรียงลำดับ Catenable, Brodal และคณะ นำเสนอต้นไม้ที่สมดุลการทำงานอย่างหมดจดด้วย O (1) concatenate และ O (lg n) แทรกลบและค้นหา โครงสร้างข้อมูลค่อนข้างซับซ้อน มีแผนภูมิการค้นหาที่สมดุลง่ายกว่าโดยมี O (1) เรียงต่อกันทำงานหรือไม่

1
ผลข้างเคียงของ“ ผลที่สังเกตได้” หมายถึงอะไร?
ฉันมีคำถามเกี่ยวกับฟังก์ชั่นที่บริสุทธิ์ ตามหน้า Wikipedia หนึ่งในสิ่งที่จำเป็นสำหรับฟังก์ชั่น pure คือ: การประเมินผลลัพธ์ไม่ได้ทำให้เกิดผลข้างเคียงหรือเอาท์พุทที่สังเกตเห็นได้ทางความหมายเช่นการกลายพันธุ์ของวัตถุที่ไม่แน่นอนหรือเอาท์พุทไปยังอุปกรณ์ I / O ตอนนี้สิ่งนี้หมายความว่าอะไรจริงๆ หรือค่อนข้างฉันจะสร้างผลข้างเคียงที่ไม่สามารถสังเกตเห็นได้ทางความหมาย?

3
อัลกอริทึมใดที่สามารถแสดงได้โดยใช้ภาษาที่ใช้งานได้ทั้งหมดกับตัวดำเนินการขนานข้อมูล
ลองนึกภาพภาษาโปรแกรมที่ใช้งานได้ซึ่งมีชนิดข้อมูลเป็นสเกลาร์ตัวเลขและการซ้อนข้อมูลแบบอาเรย์โดยพลการ ภาษาขาดวิธีการทำซ้ำใด ๆ ที่ไม่ จำกัด ดังนั้นสิ่งต่อไปนี้จะไม่ได้รับอนุญาต: ชัดเจนลูป (ไม่ค่อยได้ใช้โดยไม่มีผลข้างเคียง) เรียกซ้ำ ฟังก์ชั่นชั้นหนึ่งโดยพลการ (ไม่มี y-combinator) อย่างไรก็ตามภาษานี้มี: ฟังก์ชั่นระดับบนสุด ขอบเขตที่ จำกัด ให้การเชื่อม การควบคุมการไหลของกิ่ง ฟังก์ชันสเกลาร์คณิตศาสตร์และตรรกะทั่วไป ตัวสร้างอาร์เรย์แบบง่าย ๆ เช่น fill (n, x) ซึ่งสร้างอาร์เรย์ n-element ที่มีค่าเหมือนกัน x สิ่งสำคัญที่สุด: ชุด จำกัด ของตัวดำเนินการลำดับสูงกว่าซึ่งดำเนินการวนซ้ำที่มีโครงสร้างแบบขนาน (เช่นแผนที่ลดสแกนทุกคู่) หากต้องการเฉพาะเจาะจงมากขึ้นเกี่ยวกับตัวดำเนินการขนานของข้อมูล: y = แผนที่ (f, x) =&gt; y [i] = f [i] y = ลด (f, …

1
คุณเข้ารหัสอัลกอริทึมแบบนามธรรมของ Lamping โดยใช้ตัวรวมการโต้ตอบได้อย่างไร
ผู้ทำปฏิกิริยาโต้ตอบได้เสนอให้เป็นเป้าหมายในการรวบรวมสำหรับ calcul-แคลคูลัสก่อน กระดาษนั้นใช้แคลคูลัสเต็ม full มันเป็นที่รู้จักกันว่ามันเป็นไปได้ที่จะเพิ่มประสิทธิภาพการเข้ารหัส - สุทธิของแคลคูลัส λ- แคลคูลัสสำหรับเซตย่อยของ terms- ข้อตกลงที่เป็นประเภท EAL กระดาษนั้นใช้ส่วนย่อยของ calcul-แคลคูลัสโดยแปลข้อตกลง EAL-typeable ให้กับอวนปฏิสัมพันธ์ที่มีเนื้อหาที่ซับซ้อนกว่า combinators ปฏิสัมพันธ์เนื่องจากใช้ตัวอักษรที่ไม่มีที่สิ้นสุดของฉลากเพื่อจัดกลุ่มนักทำสำเนา ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะรวมทั้งข้อเสนอเข้าด้วยกัน นั่นคือมีการเข้ารหัสสำหรับอัลกอริธึมนามธรรม - นั่นคือ terms- เงื่อนไขที่เป็น EAL-typeable - เป็น combinators ปฏิสัมพันธ์หรือไม่

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