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

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

3
เหตุใด Haskell และ Scheme จึงใช้รายการที่เชื่อมโยงโดยลำพัง
รายการที่เชื่อมโยงเป็นทวีคูณมีค่าใช้จ่ายน้อยที่สุด (เพียงตัวชี้ต่อเซลล์) และช่วยให้คุณสามารถผนวกทั้งสองส่วนและกลับไปกลับมาและสนุกโดยทั่วไป

1
อะไรคือสัญชาติญาณที่สนับสนุนการเรียกตัวสร้างบางทีใน Haskell“ Just”?
สัญชาตญาณของประเภทที่เป็นตัวเลือกเช่นเดียวกับMaybe Intที่ไม่มี Int (เช่นนั้นNothingมี) หรือว่ามีInt บางตัว มีบางสิ่งที่นั่น มันทำให้ฉันรู้สึกว่าเราเรียก constructor ชนิดสำหรับ "เชิงลบ" กรณีNothingเพราะมันหมายความว่าที่ - ว่าไม่มีIntมี แต่ใช้คำว่าทำไมเพียงแค่ในกรณีที่เน้นอยู่ในสิ่งที่เป็นจริงมี ? สำหรับฉันคำว่า "เพิ่ง" มีความหมายแฝงอยู่ว่าสิ่งที่อธิบายนั้นน้อยกว่าทางเลือก ตรงกันข้ามกับสิ่งที่อยู่ที่นั่นจริง ๆ ; ตัวอย่างเช่น, ตอบ: คุณกำลังทำอะไรคืนนี้ B: ไม่; ฉันแค่จะอยู่ในและดูทีวี ตอบ: คุณตรวจสอบเสียงผีที่น่าขนลุกรอบ ๆ บ้านของคุณหรือไม่? B: ใช่ปรากฎว่ามันเป็นแค่นกฮูก เห็นได้ชัดว่าฉันขาดสัญชาตญาณสิ่งที่ตัวเลือกการตั้งชื่อนี้มีพื้นฐานมาจาก มันคืออะไร? เพราะให้ฉันคำเพียงหมายถึงตรงข้ามของวิธีการที่จะนำมาใช้ในที่Maybeประเภท

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

6
สิ่งนี้จะถูกโปรแกรมใน non-OO ได้อย่างไร? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา การอ่านบทความที่เหยียดหยามเกี่ยวกับข้อเสียของ OOP เพื่อสนับสนุนกระบวนทัศน์อื่น ๆ ที่ฉันพบเจอตัวอย่างที่ฉันไม่สามารถหาข้อผิดพลาดได้มากเกินไป ฉันต้องการที่จะเปิดให้มีการโต้แย้งของผู้เขียนและแม้ว่าฉันสามารถเข้าใจประเด็นทางทฤษฎีของพวกเขาตัวอย่างหนึ่งโดยเฉพาะอย่างยิ่งฉันมีเวลายากที่จะลองจินตนาการว่ามันจะนำมาใช้ที่ดีขึ้นในการพูดภาษา FP จาก: http://www.smashcompany.com/technology/object-oriented-programming-is-an- ราคา-disaster-which-must-end // Consider the case where “SimpleProductManager” is a child of // “ProductManager”: public class SimpleProductManager implements ProductManager { private List products; public List getProducts() { return products; } public void increasePrice(int percentage) { …

5
ในการเขียนโปรแกรมการทำงานหนึ่งจะบรรลุ modularity ผ่านกฎหมายทางคณิตศาสตร์ได้อย่างไร
ฉันอ่านคำถามนี้ว่าโปรแกรมเมอร์ที่ใช้งานมักจะใช้การพิสูจน์ทางคณิตศาสตร์เพื่อให้แน่ใจว่าโปรแกรมทำงานได้อย่างถูกต้อง ฟังดูง่ายกว่าและเร็วกว่าการทดสอบหน่วย แต่มาจากพื้นหลังการทดสอบ OOP / หน่วยที่ฉันไม่เคยเห็นมาก่อน คุณช่วยอธิบายให้ฉันฟังและยกตัวอย่างได้ไหม

2
ประสิทธิภาพหน่วยความจำของ Haskell - วิธีไหนดีกว่ากัน?
เรากำลังใช้ไลบรารีการบีบอัดเมทริกซ์โดยยึดตามไวยากรณ์ไวยากรณ์สองมิติที่ได้รับการแก้ไข ตอนนี้เรามีสองวิธีสำหรับประเภทข้อมูลของเรา - วิธีใดจะดีกว่าในกรณีที่ใช้หน่วยความจำ (เราต้องการบีบอัดบางอย่าง;)) ไวยากรณ์ประกอบด้วย NonTerminals ที่มี 4 โปรดักชั่นหรือเทอร์มินัลทางด้านขวามือ เราจะต้องใช้ชื่อของโปรดักชั่นเพื่อการตรวจสอบความเท่าเทียมกันและการย่อเล็กสุดไวยากรณ์ ครั้งแรก: -- | Type synonym for non-terminal symbols type NonTerminal = String -- | Data type for the right hand side of a production data RightHandSide = DownStep NonTerminal NonTerminal NonTerminal NonTerminal | Terminal Int -- | Data type …

3
ทำไมเราไม่สามารถเขียนฟังก์ชั่นการจดชวเลขซ้อนใน Clojure ได้?
ฉันพยายามประเมินการแสดงออกของ Clojure ด้วยฟังก์ชั่นชวเลขที่ซ้อนกันในวันนี้และมันจะไม่ยอมให้ฉัน การแสดงออกคือ: (#(+ % (#(+ % (* % %)) %)) 5) ; sorry for the eye bleed ผลลัพธ์คือ: IllegalStateException Nested #()s are not allowed clojure.lang.LispReader$FnReader.invoke (LispReader.java:630) ...and a bunch of other garbage

5
คำนวณถ้าฟังก์ชั่นนั้นบริสุทธิ์
ตาม Wikipedia: ในการเขียนโปรแกรมคอมพิวเตอร์ฟังก์ชั่นอาจอธิบายได้ว่าบริสุทธิ์ถ้าทั้งสองคำสั่งเหล่านี้เกี่ยวกับฟังก์ชั่นไว้: ฟังก์ชั่นประเมินค่าผลลัพธ์เดียวกันเสมอให้ค่าอาร์กิวเมนต์ที่เหมือนกัน ค่าผลลัพธ์ของฟังก์ชันไม่สามารถขึ้นอยู่กับข้อมูลหรือสถานะใด ๆ ที่ซ่อนอยู่ซึ่งอาจเปลี่ยนแปลงได้เมื่อการดำเนินการของโปรแกรมดำเนินไปหรือระหว่างการดำเนินการที่แตกต่างกันของโปรแกรมและไม่สามารถขึ้นอยู่กับอินพุตภายนอกจากอุปกรณ์ I / O การประเมินผลลัพธ์ไม่ได้ทำให้เกิดผลข้างเคียงหรือเอาท์พุทที่สังเกตเห็นได้ทางความหมายเช่นการกลายพันธุ์ของวัตถุที่ไม่แน่นอนหรือเอาท์พุทไปยังอุปกรณ์ I / O ฉันสงสัยว่ามันเป็นไปได้ที่จะเขียนฟังก์ชั่นที่คำนวณว่าฟังก์ชั่นนั้นบริสุทธิ์หรือไม่ รหัสตัวอย่างใน Javascript: function sum(a,b) { return a+b; } function say(x){ console.log(x); } isPure(sum) // True isPure(say) // False

1
ทำไมสกาล่าจำเป็นต้องใช้ฟังก์ชั่นที่มีประเภทผลตอบแทนชัดเจน?
ฉันเพิ่งเริ่มเรียนรู้การเขียนโปรแกรมในสกาล่าและมันสนุกมาก ฉันชอบความสามารถในการประกาศฟังก์ชั่นภายในฟังก์ชั่นอื่นซึ่งดูเหมือนว่าจะใช้งานได้ง่าย หนึ่งโกรธสัตว์เลี้ยงฉันมีเกี่ยวกับสกาล่าคือความจริงที่สกาล่าต้องพิมพ์กลับที่ชัดเจนในการทำงานของมัน และฉันรู้สึกว่านี่เป็นอุปสรรคต่อการแสดงออกของภาษา นอกจากนี้ยังเป็นเรื่องยากที่จะเขียนโปรแกรมตามข้อกำหนดนั้น อาจเป็นเพราะฉันมาจาก Javascript และ Ruby comfort zone แต่สำหรับภาษาอย่างสกาล่าซึ่งจะมีฟังก์ชั่นเชื่อมต่อมากมายในแอปพลิเคชันฉันไม่สามารถเข้าใจได้ว่าฉันจะระดมสมองในหัวของฉันได้อย่างไรว่าฟังก์ชั่นเฉพาะที่ฉันเขียนควรกลับมาพร้อมการเรียกซ้ำ ข้อกำหนดของการประกาศชนิดส่งคืนอย่างชัดเจนในฟังก์ชันนี้ไม่รบกวนฉันสำหรับภาษาเช่น Java และ C ++ การเรียกซ้ำใน Java และ C ++ เมื่อเกิดขึ้นมักจะถูกจัดการด้วยฟังก์ชันสูงสุด 2 ถึง 3 ฟังก์ชัน ไม่เคยมีฟังก์ชั่นหลายอย่างเชื่อมโยงเข้าด้วยกันเหมือน Scala ดังนั้นฉันเดาฉันสงสัยว่ามีเหตุผลที่ดีว่าทำไมสกาล่าควรมีความต้องการของฟังก์ชั่นที่มีประเภทผลตอบแทนที่ชัดเจน?

3
เป็นการเริ่มต้นที่ดีกว่าการเตรียมแอตทริบิวต์ในชั้นเรียนหรือเพิ่มไปตามทาง?
ฉันขอโทษถ้านี่เป็นคำถามที่ซับซ้อนอย่างแน่นอน แต่ฉันอยากรู้ว่าแนวทางปฏิบัติที่ดีที่สุดออกไปที่นั่นและฉันดูเหมือนจะไม่พบคำตอบที่ดีใน Google ใน Python ฉันมักจะใช้คลาสที่ว่างเปล่าเป็นคอนเทนเนอร์โครงสร้างข้อมูล super-catchall (เรียงลำดับเหมือนไฟล์ JSON) และเพิ่มคุณสมบัติไปพร้อมกัน: class DataObj: "Catch-all data object" def __init__(self): pass def processData(inputs): data = DataObj() data.a = 1 data.b = "sym" data.c = [2,5,2,1] สิ่งนี้ทำให้ฉันมีความยืดหยุ่นอย่างมากเนื่องจากอ็อบเจกต์คอนเทนเนอร์สามารถเก็บอะไรก็ได้ ดังนั้นหากความต้องการใหม่เกิดขึ้นฉันจะเพิ่มมันเป็นคุณสมบัติอื่นไปยังวัตถุ DataObj (ซึ่งฉันผ่านไปรอบ ๆ ในรหัสของฉัน) อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันรู้สึกประทับใจ (โดยโปรแกรมเมอร์ FP) ว่านี่เป็นการฝึกฝนที่แย่มากเพราะมันยากที่จะอ่านรหัส หนึ่งจะต้องผ่านรหัสทั้งหมดเพื่อคิดออกว่าคุณลักษณะ DataObj จริงมีอะไร คำถาม : ฉันจะเขียนสิ่งนี้ใหม่เพื่อการบำรุงรักษาที่มากขึ้นได้อย่างไรโดยไม่ลดความยืดหยุ่นลง? …

3
แนวทางปฏิบัติที่ดีที่สุดของ Scala หรือ Clojure Functional Programming
ฉันทำการเข้ารหัสด้วยตนเองจำนวนมากได้รับประสบการณ์จากโมเดลการเขียนโปรแกรมแบบขนาน: นักแสดงซอฟต์แวร์หน่วยความจำทรานแซคชันซอฟต์แวร์การไหลของข้อมูล เมื่อฉันพยายามใช้สถาปัตยกรรมเหล่านี้กับชีวิตจริง - ลงในเว็บแอปพลิเคชันที่โหลดสูง - โมเดลใด ๆ ไม่สนับสนุนความทนทานและความคงทนของข้อมูล ภารกิจในชีวิตจริงต้องการบันทึกข้อมูลในตอนท้าย ซึ่งหมายความว่าฉันยังต้องใช้ DB และดักการซิงค์ฐานข้อมูลคอขวดที่ปรับขยายได้ที่เป็นไปได้เป็นต้น ไม่มีใครรู้ตัวอย่างที่ดีของสถาปัตยกรรม (src หรือข้อความหรือไดอะแกรมหรือพิมพ์เขียว) ที่ใช้Akka Actors หรือ Software Transaction Memory และใช้ความคงทนในตอนท้าย? ตัวอย่าง / ความคิดที่ดีสำหรับ Transactional Memory, Actors, Dataflow, Tuple ช่องว่างในแอปพลิเคชันในชีวิตจริงยินดีต้อนรับ

5
แปลงรายการค่าเร่งรัด 24 ชั่วโมงเป็นทั้งหมดโดยชั่วโมง
สมมติว่าฉันมีรายการค่าการตกตะกอนเป็นชั่วโมงแต่ละคนแสดงว่าฝนตกมากแค่ไหนใน 24 ชั่วโมงก่อนเรียงตามวันที่ ตัวอย่างเช่น: { '2012-05-24 12:00': 0.5, // .5" of rain from 5/23 12:00 - 5/24 11:59 '2012-05-24 11:00': 0.6, // .6" of rain from 5/23 11:00 - 5/24 10:59 '2012-05-24 10:00': 0.6, // .6" of rain from 5/23 10:00 - 5/24 09:59 ... '2012-05-23 10:00': 0 } มีกลยุทธ์ …

4
ออกแบบในภาษา“ แบบผสม”: การออกแบบเชิงวัตถุหรือการโปรแกรมเชิงฟังก์ชันหรือไม่?
ในช่วงไม่กี่ปีที่ผ่านมาภาษาที่ฉันชอบใช้นั้นเพิ่มมากขึ้น ตอนนี้ฉันใช้ภาษาที่เป็น "ลูกผสม": C #, F #, Scala ฉันชอบที่จะออกแบบแอปพลิเคชันของฉันโดยใช้คลาสที่สอดคล้องกับวัตถุโดเมนและใช้คุณสมบัติการทำงานที่ทำให้การเขียนรหัสง่ายขึ้นตรงและปลอดภัยยิ่งขึ้น (โดยเฉพาะอย่างยิ่งเมื่อทำงานกับคอลเลกชัน อย่างไรก็ตามทั้งสองโลก "ปะทะกัน" เมื่อมาถึงรูปแบบการออกแบบ ตัวอย่างเฉพาะที่ฉันเผชิญเมื่อเร็ว ๆ นี้คือรูปแบบการสังเกตการณ์ ฉันต้องการให้ผู้ผลิตแจ้งรหัสอื่น ๆ ("ผู้บริโภค / ผู้สังเกตการณ์" พูดที่เก็บข้อมูล DB ตัวบันทึกและอื่น ๆ ) เมื่อรายการถูกสร้างหรือเปลี่ยนแปลง ตอนแรกฉันทำมัน "ตามหน้าที่" เช่นนี้: producer.foo(item => { updateItemInDb(item); insertLog(item) }) // calls the function passed as argument as an item is processed แต่ตอนนี้ฉันสงสัยว่าฉันควรใช้วิธีการ "OO" …

1
รูปแบบ UI ในภาษาที่ใช้งานได้
ฉันต้องการเริ่มเล่นซอกับ ClojureScript แต่ฉันสับสนเกี่ยวกับบางจุด ปัญหาของฉันคือวิธีที่ดีในการจัดการกับการเปลี่ยนแปลงสถานะที่มาจากการโต้ตอบของผู้ใช้เมื่อคุณพยายามทำงานตามหน้าที่ ขอยกตัวอย่างสักสองสามข้อ ฉันมีแอปพลิเคชันในใจที่ทำงานในเบราว์เซอร์ แต่ฉันคิดว่าปัญหานี้เป็นเรื่องทั่วไปมากกว่า แน่นอนว่าบางสิ่งจะเปลี่ยนไป - DOM เป็นอย่างน้อย แต่ฉันต้องการค้นหาวิธีจัดระเบียบรหัสที่เหลือเพื่อทำงานกับโครงสร้างข้อมูลที่เปลี่ยนแปลงไม่ได้ 1) ว่าฉันต้องการแนบกิจกรรมบางอย่างกับวัตถุ DOM บางอย่าง นี่ไม่ใช่เรื่องยากที่จะทำในลักษณะที่ใช้งานได้เป็นส่วนใหญ่: เมื่อคุณสร้างโหนดคุณจะแนบแผนที่แฮชกับตัวจัดการเหตุการณ์ต่าง ๆ แต่ให้พิจารณากรณีที่คุณใช้การมอบหมายกิจกรรม จากนั้นเมื่อคุณสร้างโหนดใหม่คุณอาจแนบตัวจัดการเหตุการณ์กับโหนดพาเรนต์ที่อาจมีอยู่แล้ว ดังนั้นคุณจะต้องเปลี่ยนแฮชที่เกี่ยวข้องกับโหนดที่มีอยู่แล้ว 2) สมมติว่าฉันกำลังออกแบบโมดูลเติมข้อความอัตโนมัติสำหรับฟิลด์อินพุต ทุกครั้งที่ผู้ใช้กดปุ่มฉันสามารถโทรหาเซิร์ฟเวอร์เพื่อรับคำแนะนำ มันง่ายมาก แต่ตอนนี้สมมติว่าฉันต้องการปรับให้เหมาะสมเล็กน้อย ถ้าฉันรู้ว่าผลที่ตรงกันทั้งหมดfooมีจุดในการถามอีกครั้งเพื่อให้ได้ผลลัพธ์ที่ตรงกันทั้งหมดไม่มีfoobar; ฉันสามารถกรองอดีต ดังนั้นฉันต้องสร้างแคชบางประเภท แคชนี้จะได้รับการอัปเดตทุกครั้งที่ผู้ใช้แทรกคำใหม่ซึ่งไม่ใช่คำที่ป้อนไว้ก่อนหน้านี้ อีกครั้ง: ฉันจะสร้างแบบจำลองแคชได้อย่างไร วิธีที่สมเหตุสมผลที่สุดดูเหมือนจะเป็นคำการแมปแฮชกับผลลัพธ์ แต่ควรจะไม่แน่นอน คุณสามารถแนะนำรูปแบบบางอย่างที่จะทำให้ง่ายต่อการรวมการเปลี่ยนแปลงเนื่องจากการโต้ตอบกับผู้ใช้ในการออกแบบการทำงาน

5
โครงสร้างข้อมูลในการโปรแกรมเชิงฟังก์ชัน
ขณะนี้ฉันกำลังเล่นกับ LISP (โดยเฉพาะ Scheme และ Clojure) และฉันสงสัยว่าโครงสร้างข้อมูลทั่วไปนั้นจัดการกับภาษาโปรแกรมที่ใช้งานได้อย่างไร ตัวอย่างเช่นสมมติว่าฉันต้องการแก้ปัญหาโดยใช้อัลกอริธึมการค้นหาพา ธ กราฟ โดยทั่วไปแล้วเราจะแสดงกราฟนั้นในภาษาโปรแกรมที่ใช้งานได้อย่างไร (โดยหลักแล้วสนใจในรูปแบบการทำงานที่บริสุทธิ์ซึ่งสามารถนำไปใช้กับ LISP) ฉันจะลืมกราฟทั้งหมดและแก้ปัญหาด้วยวิธีอื่นได้ไหม

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