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

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

4
Rich Hickey หมายความว่าอย่างไรเมื่อเขาพูดว่า“ ความพิเศษเฉพาะทั้งหมดของอินเทอร์เฟซ / คลาส / ประเภท] ฆ่าการใช้ซ้ำของคุณ!”
ในคำปราศรัยการประชุม goto ในการประชุมระดมความคิดที่กระตุ้นความคิดของ " มูลค่าของคุณค่า " ในเวลา 29 นาทีที่เขาพูดถึงค่าใช้จ่ายในภาษาจาวาและทำให้คำสั่งเช่น เขาหมายถึงอะไร มันเป็นเรื่องจริงเหรอ? ในการค้นหาคำตอบของฉันฉันเจอ: หลักการของความรู้น้อยที่สุด AKA กฎหมายของ Demeterซึ่งสนับสนุนการเชื่อมต่อ API แบบสุญญากาศ Wikipedia ยังแสดงข้อเสียบางประการ วิกฤตเสื้อผ้าของ Kevlin Henney ซึ่งระบุว่าการใช้ไม่ใช่การใช้ซ้ำเป็นเป้าหมายที่เหมาะสม การพูดคุยเรื่อง " Stop Writing Classes " ของ Jack Diederich ซึ่งขัดแย้งกับเรื่องวิศวกรรมโดยทั่วไป เห็นได้ชัดว่าสิ่งใดที่เขียนไม่ดีพอจะไร้ประโยชน์ แต่อินเทอร์เฟซของ API ที่เขียนดีจะป้องกันไม่ให้ใช้รหัสนั้นได้อย่างไร มีตัวอย่างตลอดประวัติศาสตร์ของบางสิ่งบางอย่างที่ทำขึ้นเพื่อจุดประสงค์เดียวที่ถูกใช้เพื่อสิ่งอื่นมากกว่า แต่ในโลกของซอฟต์แวร์ถ้าคุณใช้บางอย่างเพื่อจุดประสงค์ที่ไม่ได้มีไว้สำหรับมันก็มักจะแตก ฉันกำลังมองหาหนึ่งตัวอย่างที่ดีของอินเทอร์เฟซที่ดีที่ป้องกันไม่ให้ใช้รหัสบางอย่างถูกต้อง มีอยู่จริงเหรอ? ฉันไม่สามารถจินตนาการได้

3
มีอะไรที่ยอดเยี่ยมเกี่ยวกับ Clojure [ปิด]
ฉันได้ดู Clojure เมื่อเร็ว ๆ นี้และฉันสะดุดโพสต์ใน Stackoverflowที่ระบุว่าโครงการบางอย่างปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดและรหัส Clojure ที่ดีโดยรวม ฉันต้องการเรียนภาษาอังกฤษหลังจากอ่านบทเรียนพื้นฐานบางอย่างดังนั้นฉันจึงดูโครงการ "โลกแห่งความจริง" บางอย่าง หลังจากดูClojureScriptและCompojure (สองโครงการ "ดี" ดังกล่าวข้างต้น) ฉันแค่รู้สึกว่า Clojure เป็นเรื่องตลก ผมไม่เข้าใจว่าทำไมคนที่จะเลือก Clojure มากกว่าพูด, ทับทิมหรืองูหลามสองภาษาที่ฉันรักและมีเช่นไวยากรณ์ที่สะอาดและมีความง่ายต่อการรับขณะ Clojure ใช้มากวงเล็บและสัญลักษณ์ทุกที่ว่ามันซากปรักหักพังอ่านง่ายสำหรับ ฉัน. ฉันคิดว่า Ruby และ Python นั้นสวยงามอ่านง่ายและสง่างาม อ่านง่ายแม้กับคนที่ไม่เข้าใจภาษา อย่างไรก็ตาม Clojure นั้นทึบสำหรับฉันและฉันรู้สึกว่าฉันต้องรู้รายละเอียดเล็ก ๆ น้อย ๆ เกี่ยวกับการใช้ภาษาเพื่อให้สามารถเข้าใจรหัสใด ๆ ดังนั้นโปรดช่วยสอนฉันด้วย! อะไรดีเกี่ยวกับ Clojure ขั้นต่ำสุดที่ฉันควรรู้เกี่ยวกับภาษาคืออะไรเพื่อขอบคุณมัน
40 clojure 

6
ทำไม“ การมีเพศสัมพันธ์อย่างแน่นหนาระหว่างฟังก์ชั่นและข้อมูล” ไม่ดี?
ฉันพบข้อความนี้ใน " ความสุขของ Clojure " บนหน้า 32 แต่มีบางคนพูดสิ่งเดียวกันกับฉันในมื้อค่ำเมื่อสัปดาห์ที่แล้วและฉันก็ได้ยินที่อื่นเช่นกัน: [A] ข้อเสียของการเขียนโปรแกรมเชิงวัตถุคือการมีเพศสัมพันธ์อย่างแน่นหนาระหว่างฟังก์ชั่นและข้อมูล ฉันเข้าใจว่าเหตุใดการเชื่อมต่อที่ไม่จำเป็นจึงไม่ดีในแอปพลิเคชัน นอกจากนี้ฉันรู้สึกสบายใจที่จะบอกว่าควรหลีกเลี่ยงสถานะและการสืบทอดที่ไม่แน่นอนแม้ในการเขียนโปรแกรมเชิงวัตถุ แต่ฉันล้มเหลวที่จะเห็นว่าทำไมการติดฟังก์ชั่นในชั้นเรียนจึงไม่ดีอย่างแท้จริง ฉันหมายถึงการเพิ่มฟังก์ชั่นในชั้นเรียนดูเหมือนว่าจะติดแท็กเมลใน Gmail หรือติดไฟล์ในโฟลเดอร์ เป็นเทคนิคขององค์กรที่ช่วยให้คุณค้นพบอีกครั้ง คุณเลือกเกณฑ์บางอย่างจากนั้นรวบรวมสิ่งต่าง ๆ เข้าด้วยกัน ก่อน OOP โปรแกรมของเรามีวิธีการมากมายในไฟล์ ฉันหมายความว่าคุณต้องใส่ฟังก์ชั่นบางแห่ง ทำไมไม่จัดระเบียบพวกเขา? หากนี่เป็นการโจมตีแบบ veiled ในประเภททำไมพวกเขาถึงไม่พูดว่าการ จำกัด ประเภทของอินพุตและเอาต์พุตไปยังฟังก์ชันนั้นผิด ฉันไม่แน่ใจว่าฉันจะเห็นด้วยกับเรื่องนี้หรือไม่ แต่อย่างน้อยฉันก็คุ้นเคยกับข้อโต้แย้งอย่างมืออาชีพและความปลอดภัยในการพิมพ์ ฟังดูเป็นเรื่องที่ฉันกังวลเป็นส่วนใหญ่ แน่นอนว่าบางครั้งผู้คนเข้าใจผิดและวางการทำงานผิดประเภท แต่เมื่อเทียบกับข้อผิดพลาดอื่น ๆ ดูเหมือนว่าจะเป็นความไม่สะดวกเล็กน้อย ดังนั้น Clojure มีเนมสเปซ การผสานฟังก์ชันกับคลาสใน OOP แตกต่างจากการผสานฟังก์ชันในเนมสเปซใน Clojure ได้อย่างไรและทำไมมันจึงไม่ดี โปรดจำไว้ว่าฟังก์ชั่นในชั้นเรียนไม่จำเป็นต้องทำงานกับสมาชิกของคลาสนั้นเสมอไป ดูที่ java.lang.StringBuilder - ทำงานกับประเภทการอ้างอิงใด …

7
C # Dev - ฉันได้ลองใช้ Lisps แล้ว แต่ฉันไม่เข้าใจ [ปิด]
หลังจากสองสามเดือนของการเรียนรู้และเล่นกับ Lisp ทั้ง CL และบิตของ Clojure ฉันยังไม่เห็นเหตุผลที่น่าสนใจที่จะเขียนอะไรลงไปแทนที่จะเป็น C # ฉันจะชอบเหตุผลที่น่าสนใจบางส่วนหรือสำหรับคนที่จะชี้ให้เห็นว่าฉันหายไปบางสิ่งบางอย่างที่ยิ่งใหญ่จริงๆ จุดแข็งของ Lisp (ต่อการวิจัยของฉัน): กะทัดรัดสัญกรณ์ที่แสดงออก - มากกว่า C # ใช่ใช่ ... แต่ฉันดูเหมือนจะสามารถแสดงความคิดเห็นเหล่านั้นใน C # ด้วย การสนับสนุนโดยนัยสำหรับการตั้งโปรแกรมการทำงาน - C # พร้อมด้วยวิธีการขยาย LINQ: mapcar = .Select (แลมบ์ดา) mapcan = .Select (แลมบ์ดา) .regregate ((a, b) => a.Union (b)) car / first = .First () …
37 clojure  lisp 

7
อะไรคือสิ่งที่เทียบเท่าการทำงานของคำสั่งทำลายความจำเป็นและการตรวจสอบวงอื่น ๆ ?
สมมติว่าฉันเป็นตรรกะด้านล่าง วิธีการเขียนในฟังก์ชั่นการเขียนโปรแกรม? public int doSomeCalc(int[] array) { int answer = 0; if(array!=null) { for(int e: array) { answer += e; if(answer == 10) break; if(answer == 150) answer += 100; } } return answer; } ตัวอย่างในบล็อกบทความส่วนใหญ่ ... ฉันเห็นเพียงแค่อธิบายกรณีง่าย ๆ ของฟังก์ชันทางคณิตศาสตร์ตรงไปข้างหน้าหนึ่งคำว่า 'ผลรวม' แต่ฉันมีเหตุผลคล้ายกับที่เขียนไว้ข้างต้นใน Java และต้องการย้ายที่ไปยังรหัสการทำงานใน Clojure หากเราไม่สามารถทำตามข้างต้นใน FP ดังนั้นการส่งเสริมการขายประเภท FP ไม่ได้ระบุไว้อย่างชัดเจน …

4
JVM มีข้อ จำกัด อะไรในการเพิ่มประสิทธิภาพการโทรแบบหาง
Clojure ไม่ได้ดำเนินการเพิ่มประสิทธิภาพการโทรหางในตัวเอง: recurเมื่อคุณมีหางฟังก์ชันเวียนและคุณต้องการที่จะมีมันที่ดีที่สุดที่คุณจะต้องใช้รูปแบบพิเศษ ในทำนองเดียวกันถ้าคุณมีสองฟังก์ชั่น recursive trampolineร่วมกันคุณสามารถเพิ่มประสิทธิภาพพวกเขาเท่านั้นโดยใช้ คอมไพเลอร์ Scala สามารถดำเนินการ TCO สำหรับฟังก์ชันแบบเรียกซ้ำ แต่ไม่ใช่สำหรับสองฟังก์ชันแบบเรียกซ้ำ เมื่อใดก็ตามที่ฉันได้อ่านเกี่ยวกับข้อ จำกัด เหล่านี้พวกเขามักจะกำหนดข้อ จำกัด ที่แท้จริงให้กับตัวแบบ JVM ฉันไม่รู้อะไรเลยเกี่ยวกับคอมไพเลอร์ แต่มันทำให้ฉันสับสนเล็กน้อย Programming Scalaผมขอใช้ตัวอย่างจาก ฟังก์ชั่นที่นี่ def approximate(guess: Double): Double = if (isGoodEnough(guess)) guess else approximate(improve(guess)) ถูกแปลเป็น 0: aload_0 1: astore_3 2: aload_0 3: dload_1 4: invokevirtual #24; //Method isGoodEnough:(D)Z 7: ifeq 10: …
36 scala  clojure  jvm  tail-call 

13
ปัญหา (เช่นการบำรุงรักษา) ในการพัฒนาด้วยภาษาที่ไม่เป็นที่นิยม
ฉันกำลังพัฒนาแอปพลิเคชันบางอย่างโดยใช้ clojure (เสียงกระเพื่อม) เพียงอย่างเดียวในทีมของฉัน มันเริ่มเป็นแอปพลิเคชั่นขนาดเล็ก ไม่มีปัญหา. แต่เนื่องจากมันมีคุณสมบัติและขยายพื้นที่ออกไปมันจึงกลายเป็นโปรแกรมที่สำคัญ ฉันกังวลเกี่ยวกับการบำรุงรักษาหรืออะไรบางอย่าง ไม่มีใครในทีมของฉันรู้ว่าการปิดบังหรือเสียงกระเพื่อมและไม่สนใจภาษาเช่นพวกเขา ดังนั้นการเขียนโปรแกรมในภาษาที่ไม่นิยมใช่ไหม (เพื่อความสนุกของฉันเอง) ฉันควรใช้ภาษายอดนิยมมากกว่านี้ไหม? (อย่างน้อยเช่น python) ฉันแน่ใจว่าถ้าฉันออกจากทีม - ไม่ได้บอกว่าฉันไปแล้ว :) - ไม่มีใครจะรักษามัน โปรแกรมนี้จะถูกทำลายและบางส่วนจะพัฒนาด้วยภาษาอื่น ฉันสนุกกับการพัฒนาด้วย clojure มาก แต่ฉันก็เจอกับสิ่งนี้อาจไม่เหมาะกับทีมของฉัน คุณคิดอย่างไรเกี่ยวกับเรื่องนี้? ฉันคิดว่าโปรแกรมเมอร์จำนวนมากที่รักภาษาที่ไม่เป็นที่นิยมมีปัญหาเกี่ยวกับเรื่องเดียวกัน

3
บนเส้นทางสู่การตรัสรู้: Scheme, Common Lisp, Clojure? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน8 ปีที่ผ่านมา ผู้คนจำนวนมากฉลาดกว่าที่ฉันเขียนไว้เสมอเมื่อคุณเรียนรู้ Lisp มันทำให้คุณเป็นโปรแกรมเมอร์ที่ดีขึ้นเพราะคุณ "เข้าใจ" บางทีทั้งหมดที่ฉันได้ยินเกี่ยวกับเสียงกระเพื่อมเปลี่ยนชีวิตของคุณเป็นเพียงเรื่องตลกขนาดใหญ่ในมือใหม่ แต่ฉันคิดว่าไม่มีอันตรายใด ๆ ในการรู้มากขึ้นเกี่ยวกับโลกแม้ว่าฉันจะพบว่าฉันถูกส่งไปหลังจากนกปากซ่อมหรืออะไรบางอย่าง . ฉันต้องการติดตามหนังสือ SICP และหรือ ANSI Common LISP แต่ในเวลาเดียวกันฉันกำลังศึกษาภาษาถิ่นและการใช้งานที่ฉันสามารถใช้ในโครงการส่วนบุคคลได้ SICP มุ่งเน้นไปที่ Scheme ดังนั้นจึงเป็นการลงคะแนนเสียงครั้งใหญ่ พอลเกรแฮมกล่าวว่าหากเขาจะสอนมือใหม่เขาจะทำใน Scheme แต่ฟังดูเหมือน Scheme ยังด้อยกว่า Common LISP แต่แล้วก็มี Clojure - ซึ่งฉันบอกว่าถูก จำกัด ด้วยวิธีการ แต่มีประโยชน์มากกว่าสำหรับคนอื่น ๆ (ห้องสมุด JVM) ดูเหมือนว่าฉันจะสามารถเข้าถึงวัสดุ Scheme …

5
เหตุใดชุมชน Lisp จึงต้องการสะสมวงเล็บทั้งหมดเมื่อสิ้นสุดฟังก์ชัน
เหตุใดชุมชน Lisp จึงต้องการสะสมวงเล็บทั้งหมดเมื่อสิ้นสุดฟังก์ชัน: (defn defer-expensive [cheap expensive] (if-let [good-enough (force cheap)] good-enough (force expensive))) ทำไมไม่ใช้การประชุมเช่น C หรือ Java โอเค Lisp มีอายุมากกว่าภาษาเหล่านั้นมาก แต่ฉันกำลังพูดถึง Lispers ร่วมสมัย (defn defer-expensive [cheap expensive] (if-let [good-enough (force cheap)] good-enough (force expensive) ) ) หมายเหตุ: ข้อมูลโค้ดมาจากหนังสือ "ความสุขของ Clojure"

1
การจัดส่งแอปเดสก์ท็อป Clojure เป็นจริงหรือไม่
ฉันกำลังจัดส่งแอปพลิเคชัน Java บนเดสก์ท็อป มันเป็นแอพ Java 5 Java / Swing แบบธรรมดาและทุกอย่างทำงานได้ดี มีการกำหนดเป้าหมาย Java 5 เนื่องจากผู้ใช้บางรายอยู่ในรุ่น OS X / คอมพิวเตอร์ซึ่งจะไม่มี Java 6 (เราอาจยกเลิกข้อ จำกัด นี้ในไม่ช้าและสลับไปใช้ Java รุ่นใหม่และทิ้งผู้ใช้ของฉันที่ติดอยู่กับ Java 5) ฉันกำลังเร่งความเร็วอย่างรวดเร็วด้วย Clojure แต่ฉันยังไม่ได้ทำ Clojure-to-Java และ Java-to-Clojure จำนวนมากจริงๆและฉันสงสัยว่ามันเป็นเรื่องจริงหรือไม่ที่จะจัดส่งแอปพลิเคชัน Clojure เดสก์ท็อปแทนแอพพลิเคชัน Java ? แอปพลิเคชันที่ฉันกำลังจัดส่งอยู่ในขณะนี้ประมาณ 12 MB พร้อมด้วย. jarทั้งหมดดังนั้นการเพิ่ม Clojure ไม่พบปัญหามากเกินไป แผนของฉันคือการมี Clojure เรียก Java APIs: …

5
ภาษาที่ใช้ในการเขียนโปรแกรม“ ให้” ปรากฏขึ้นเป็นครั้งแรก?
ฉันสงสัยเกี่ยวกับต้นกำเนิดของ "การปล่อย" ที่ใช้ใน Lisp, Clojure และ Haskell มีใครรู้บ้างว่าภาษานั้นปรากฏในภาษาใดเป็นอันดับแรก

3
ทำไมบางภาษาที่ใช้งานจำเป็นต้องใช้หน่วยความจำในการทำธุรกรรมซอฟต์แวร์
ภาษาที่ใช้งานได้ตามคำจำกัดความไม่ควรรักษาตัวแปรสถานะ เหตุใด Haskell, Clojure และอื่น ๆ จึงมีการใช้งานซอฟต์แวร์ transactional memory (STM) มีความขัดแย้งระหว่างสองแนวทางหรือไม่?

3
Clojure มีการต่อเนื่อง / coroutines / etc หรือไม่?
ฉันเริ่มเขียนโปรแกรมด้วย Python และฉันสับสนกับแนวคิดอย่างเช่น coroutines และ closures ตอนนี้ฉันคิดว่าฉันรู้จักพวกเขาในระดับตื้น ๆ แต่ฉันไม่เคยรู้สึกว่าช่วงเวลา "สว่าง" ดังนั้นฉันเลือกเรียน Clojure ฉันซื้อหนังสือของ Stuart Halloway และมันก็ดี แต่เมื่อฉันดูที่ดัชนีไม่มีคำพูดใด ๆ เช่น coroutine หรือความต่อเนื่อง ฉัน googled พวกเขา แต่ก็ไม่มีอะไรที่นั่น ดังนั้นคำถามของฉันคือ: Clojure มีการต่อเนื่องหรือ coroutines ในการทำงานเช่น pong-ponging โดยไม่ล้นกอง? ตัวอย่าง Python (แม้ว่า Python มาตรฐานไม่รองรับเวอร์ชันเต็มรูปแบบของ coroutine สมมาตรนี้): def ping(): while 1: print "ping" function to switching to pong …

6
แนวทางปฏิบัติที่ดีที่สุดในการเขียนความคิดเห็นและเอกสาร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 7 ปีที่ผ่านมา การแสดงความคิดเห็นในปัจจุบันนั้นง่ายกว่าที่เคย ใน Java มีเทคนิคที่ดีในการเชื่อมความคิดเห็นไปยังคลาสและ Java IDEs สามารถสร้างเชลล์ความคิดเห็นให้คุณได้ดี ภาษาเช่น Clojure ช่วยให้คุณสามารถเพิ่มคำอธิบายของฟังก์ชันในโค้ดฟังก์ชันเองเป็นอาร์กิวเมนต์ อย่างไรก็ตามเรายังคงอยู่ในยุคที่มักมีความคิดเห็นล้าสมัยหรือไม่ดีเขียนโดยนักพัฒนาที่ดี - ฉันสนใจที่จะปรับปรุงความทนทานและประโยชน์ของความคิดเห็นของฉัน โดยเฉพาะฉันสนใจ Java / Clojure / Python ที่นี่ แต่คำตอบไม่จำเป็นต้องเฉพาะภาษา มีเทคนิคใด ๆ ที่เกิดขึ้นใหม่ที่ตรวจสอบความคิดเห็นและตรวจสอบความคิดเห็น "บอบบาง" โดยอัตโนมัติ (ตัวอย่างเช่นความคิดเห็นที่มีหมายเลขเวทย์มนตร์ประโยคที่ไม่สมบูรณ์ ฯลฯ ) หรือความคิดเห็นที่ไม่ถูกต้อง (ตัวอย่างเช่นการตรวจสอบตัวแปรที่สะกดผิด และที่สำคัญยิ่งกว่า: มี "นโยบายการแสดงความคิดเห็น" หรือกลยุทธ์ที่ยอมรับได้หรือไม่? มีคำแนะนำมากมายเกี่ยวกับวิธีการเขียนโค้ด - แต่จะมีวิธีการอย่างไรในการแสดงความคิดเห็น?

4
“ ใช้แผนที่แทนคลาสเพื่อแสดงข้อมูล” -Rich Hickey
ในวิดีโอนี้โดย Rich Hickeyผู้สร้าง Clojure เขาแนะนำให้ใช้แผนที่เพื่อแสดงข้อมูลแทนการใช้คลาสเพื่อเป็นตัวแทนของมันดังที่ทำใน Java ฉันไม่เข้าใจว่ามันจะดีกว่านี้ได้อย่างไรเนื่องจากผู้ใช้ API จะรู้ได้อย่างไรว่าปุ่มป้อนข้อมูลคืออะไรหากมีการแสดงเป็นแผนที่ ตัวอย่าง : PersonAPI { Person addPerson(Person obj); Map<String, Object> addPerson(Map<String, Object> personMap); } ในฟังก์ชั่นที่สองผู้ใช้ API จะรู้ได้อย่างไรว่าอินพุตใดที่จะสร้างบุคคล
19 java  design  class  clojure  map 

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