เฉลี่ยเคลื่อนที่ Clojure


วันหยุดสุดสัปดาห์นี้ฉันตัดสินใจที่จะลองใช้มือของฉันที่บาง Scala และ Clojure ฉัน m เชี่ยวชาญกับการเขียนโปรแกรมเชิงวัตถุและเพื่อให้ Scala ง่ายต่อการรับเป็นภาษา แต่ต้องการทดลองใช้โปรแกรมนี้เป็นที่ที่มี hard. I เพียงสามารถ t ดูเหมือนจะได้รับหัวของฉันเข้าสู่โหมดการเขียนหน้าที่เป็นโปรแกรมเมอร์ทำงานผู้เชี่ยวชาญวิธีการที่คุณเข้าใกล้ปัญหาทำให้รายการของค่าและระยะเวลาที่กำหนดของการรวมวิธีที่คุณจะสร้างรายการใหม่ของค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายของ รายการตัวอย่างเช่นให้รายการค่า 2 0, 4 0, 7 0, 6 0, 3 0, 8 0, 12 0, 9 0, 4 0, 1 0 และงวดที่ 4 ฟังก์ชันควรคืนค่า 0 0 , 0 0, 0 0, 4 75, 5 0, 6 0, 7 25, 8 0, 8 25, 6 5. หลังจากใช้เวลาทั้งวันไปกับมันแล้วสิ่งที่ดีที่สุดที่ฉันจะได้เกิดขึ้นกับ Scala ก็คือฉันรู้ นี้เป็นอย่างไม่มีประสิทธิภาพอย่างน่ากลัวฉัน d มากค่อนข้างทำอะไร like. Now ที่จะทำได้อย่างง่ายดายในลักษณะที่จำเป็น แต่ฉันสามารถ t สำหรับชีวิตของฉันทำงานออกวิธีการแสดงที่ functionally. Interesting ปัญหาฉันสามารถคิดของ ma ny โซลูชั่นที่มีองศาที่แตกต่างของประสิทธิภาพมีการเพิ่มสิ่งที่ซ้ำ ๆ isn t จริงๆปัญหาประสิทธิภาพ แต่ให้สมมติว่าเป็นยัง zeroes ที่จุดเริ่มต้นสามารถ prepended ภายหลังเพื่อให้ไม่ต้องกังวลกับการผลิตหากมีขั้นตอนวิธีให้ พวกเขาเป็นธรรมชาติปรับถ้าไม่เราแก้ไขได้ในภายหลังเริ่มต้นด้วยสกาล่า 2 8 ต่อไปนี้จะให้ผลสำหรับรอบระยะเวลา n โดยใช้เลื่อนเพื่อให้ได้หน้าต่างบานเลื่อนของ List. Nevertheless แม้ว่านี้ค่อนข้างสง่างามก็ไม่ได้ t มีประสิทธิภาพที่ดีที่สุดเพราะ doesn t ใช้ประโยชน์จากการคำนวณเพิ่มเติมแล้วดังนั้นการพูดของพวกเขาว่าเราจะได้รับ them. Let s บอกว่าเราเขียน this. We มีรายการของผลรวมของแต่ละสองคู่ Let s ลอง ใช้ผลลัพธ์นี้เพื่อคำนวณค่าเฉลี่ยเคลื่อนที่ของ 4 องค์ประกอบสูตรข้างต้นได้คำนวณต่อไปนี้ดังนั้นถ้าเรานำแต่ละองค์ประกอบและเพิ่มลงในองค์ประกอบถัดไปที่สองเราจะได้ค่าเฉลี่ยเคลื่อนที่สำหรับองค์ประกอบ 4 ตัวเราอาจทำแบบนี้ได้ จากนั้นเราสามารถคำนวณค่าเฉลี่ยเคลื่อนที่ได้ สำหรับ 8 องค์ประกอบและอื่น ๆ ดีมีขั้นตอนวิธีที่รู้จักกันดีในการคำนวณสิ่งที่เป็นไปตามรูปแบบดังกล่าวเป็นที่รู้จักมากที่สุดสำหรับการใช้งานในการคำนวณพลังงานของตัวเลขมันจะไปเช่นนี้ดังนั้นให้ใช้มันที่นี่ดังนั้น ที่นี่ตรรกะรอบระยะเวลา 0 ไม่ถูกต้องระยะเวลาที่ 1 เท่ากับ input ช่วง 2 คือเลื่อนหน้าต่างขนาด 2 ถ้ามากกว่านั้นอาจเป็นได้หรือคี่ถ้าแปลกเราเพิ่มแต่ละองค์ประกอบเพื่อ movingSum ของ ถัดไปคี่ - 1 องค์ประกอบตัวอย่างเช่นถ้า 3 เราเพิ่มแต่ละองค์ประกอบลงใน movingSum ของ 2 elements ถัดไปถ้าเราคำนวณ movingSum สำหรับ n 2 แล้วเพิ่มแต่ละ element ลงใน n 2 steps afterwards ด้วยคำนิยามนั้น จากนั้นเราสามารถย้อนกลับไปที่ปัญหาได้และทำตามขั้นตอนดังกล่าวโดยไม่คำนึงถึงประสิทธิภาพการใช้งาน แต่เป็นระยะเวลาของ O ไม่สามารถทำได้อย่างมีประสิทธิภาพด้วยฟังก์ชัน recursive หางและแน่นอนความหมายของการเลื่อนผม ให้มีประสิทธิภาพน่ากลัวฉลาด แต่จะมีความหมายที่ดีขึ้นมากใน Scala 2 8 โปรดทราบว่าเราสามารถ t ทำ วิธีการเลื่อนที่มีประสิทธิภาพในรายการ แต่เราสามารถทำได้ใน Iterable. Having กล่าวว่าทั้งหมดที่ฉันต้องการไปกับคำจำกัดความแรกและเพิ่มประสิทธิภาพเฉพาะในกรณีที่การวิเคราะห์เส้นทางที่สำคัญชี้ให้เห็นนี้เป็นเรื่องใหญ่เพื่อสรุปให้พิจารณา ฉันมีปัญหาเกี่ยวกับค่าเฉลี่ยเคลื่อนที่ค่าเฉลี่ยเคลื่อนที่คือผลรวมของหน้าต่างที่เคลื่อนย้ายได้ในรายการหารด้วยขนาดของหน้าต่างนั้นดังนั้นก่อนอื่นฉันลองรับหน้าต่างบานเลื่อนรวมทุกอย่างไว้ แล้วหารด้วยขนาดปัญหาต่อไปคือการหลีกเลี่ยงการทำซ้ำของการคำนวณเพิ่มเติมแล้วในกรณีนี้ฉันไปที่เล็กที่สุดนอกจากนี้ยังเป็นไปได้และพยายามที่จะคิดออกว่าจะคำนวณผลรวมใหญ่ reusing ผลเช่นนั้นสุดท้ายลองมา แก้ปัญหาด้วยวิธีที่คุณคิดโดยการเพิ่มและลบออกจากผลก่อนหน้าการเริ่มต้นเฉลี่ยเป็นเรื่องง่ายตอนนี้เราสร้างสองรายการแรกรายการองค์ประกอบที่จะถูกลบออกไปถัดไปรายการองค์ประกอบที่จะเพิ่มเราสามารถ เพิ่มทั้งสองรายการโดยใช้ซิปวิธีการนี้จะแยง uce เป็นองค์ประกอบมากเป็นรายการเล็กมีซึ่งหลีกเลี่ยงปัญหาของการลบที่ใหญ่กว่าที่จำเป็นเราเสร็จสิ้นโดยการเขียนผลกับ fold. which คำตอบที่จะกลับมาฟังก์ชั่นทั้งหมดมีลักษณะเช่นนี้ฉันรู้ว่า Clojure ดีกว่า Scala ดังนั้นที่นี่ไปขณะที่ฉันเขียนรายการ Clojure อื่น ๆ ที่นี่มีความจำเป็นที่ไม่ได้จริงๆสิ่งที่คุณอีกครั้งและ ISN t idiomatic Clojure ขั้นตอนแรกที่มาถึงใจของฉันคือการซ้ำ ๆ จำนวนที่ต้องการขององค์ประกอบจากลำดับลดลง องค์ประกอบแรกและที่เกิดขึ้นต่อไปนี้ทำงานในลำดับของเวกเตอร์หรือรายการใด ๆ ขี้เกียจหรือไม่และให้ลำดับขี้เกียจของค่าเฉลี่ย --- ซึ่งอาจเป็นประโยชน์ถ้าคุณกำลังทำงานในรายการของขนาดไม่แน่นอนโปรดทราบว่าจะใช้เวลา การดูแลกรณีฐานโดยโดยนัยกลับ nil ถ้ามี aren t องค์ประกอบเพียงพอในรายการที่จะบริโภคดำเนินการนี้ในผลผลิตข้อมูลการทดสอบของคุณ doesn t ให้ 0 สำหรับองค์ประกอบแรก ๆ ในลำดับแม้ว่าจะสามารถจัดการได้อย่างง่ายดาย สิ่งที่ง่ายที่สุดสิ่งที่ง่ายที่สุดคือการดูรูปแบบและสามารถที่จะนำมาคิดฟังก์ชันที่มีให้เหมาะกับพาร์ทิชันการเรียกเก็บเงินให้มุมมองขี้เกียจของบางส่วนของลำดับซึ่งเราสามารถทำแผนที่มากกว่าใครบางคนขอหาง recursive recursion หาง vs ความเกียจคร้านเป็นบิต tradeoff เมื่องานของคุณสร้างรายการแล้วทำให้ recursive หางของคุณมักจะเป็นเรื่องง่ายสวยและนี่คือข้อยกเว้น --- เพียงสร้างรายการเป็นอาร์กิวเมนต์เพื่อ subfunction เราจะสะสมเป็นเวกเตอร์แทนรายการเนื่องจากมิฉะนั้นรายการจะถูกสร้างขึ้นย้อนหลังและจะต้องย้อนกลับไปที่ end. loop เป็นวิธีที่จะทำให้การจัดเรียงฟังก์ชันภายในที่ไม่ระบุตัวตนเหมือนอย่าง Scheme s ให้ชื่อซ้ำอีกครั้งต้องใช้ ใน Clojure เพื่อกำจัดหางโทร conj เป็นข้อสรุปทั่วไป consending ในลักษณะธรรมชาติสำหรับคอลเลกชัน --- จุดเริ่มต้นของรายการและจุดสิ้นสุดของ vectors. answered 24 สิงหาคมที่ 2 58. ฉันได้ตัดสินใจที่จะเพิ่มไปนี้เก่า Q, เพราะหัวข้อขึ้นมาอีกครั้งและฉัน f ind มัน preferrable เพื่อชี้ไปที่คอลเลกชันที่ดีของการแก้ปัญหาที่เป็นไปได้ในขณะที่การเพิ่มของฉันเองซึ่งแตกต่างจากรุ่นก่อนหน้าใน Clojure ตามที่อธิบายไว้ในบางทีเราสามารถสร้างพื้นที่เก็บข้อมูลที่สมบูรณ์แบบที่สุดของเว็บของการใช้งาน mov-avg ทำงาน - Micha Marczyk 2 มีนาคมที่ 0 20.Here เป็นส่วนหนึ่งจุดฟรีหนึ่งบรรทัด Haskell solution. First ใช้หางในรายการเพื่อให้ได้รายการหางดังนั้นมันกลับลดลงและรายการ p แรก p การเป็น 2 ที่นี่ในกรณีที่คุณ aren t คุ้นเคยกับสัญลักษณ์จุด nipple เป็นผู้ประกอบการสำหรับองค์ประกอบการทำงานหมายถึงมันส่งผ่านเอาท์พุทของฟังก์ชันหนึ่งเป็น input ของอื่นการเขียนลงในฟังก์ชันเดียว gf หมายถึงการทำงาน f ในค่าแล้วส่งผ่านออกไป g ดังนั้น fgx เป็นเช่นเดียวกับ gfx โดยทั่วไปการใช้งานของมันนำไปสู่สไตล์การเขียนโปรแกรมที่ชัดเจนแล้วมันจะแม็ปฟังก์ชันจาก sumIntegral p p ลงในรายการดังนั้นสำหรับทุกรายการในรายการจะใช้เวลาองค์ประกอบ p แรกรวมพวกเขาแล้ว divides พวกเขาด้วย p เราเพียงแค่พลิกรายการกลับมาอีกครั้งด้วยสิ่งที่ตรงกันข้ามซึ่งทั้งหมดนี้ดูมีประสิทธิภาพมากขึ้นกว่าที่เป็น reverse doesn t ทางร่างกายกลับลำดับของรายการจนกว่ารายการจะถูกประเมินก็แค่วางมันลงบน stack ดี ol เชื่องช้าหาง Haskell ยัง doesn t สร้างรายการที่แยกต่างหากทั้งหมดก็เพียงแค่การอ้างอิงส่วนต่างๆของรายการเดิมมันยังไม่ได้เป็นทางออกที่ดี แต่ก็ยาวเส้นหนึ่งซึ่งเป็นวิธีที่ดีกว่าเล็กน้อย แต่อีกต่อไปที่ใช้ mapAccum ที่จะทำเลื่อนการลบและ addition. First เราแยกรายการออกเป็นสองส่วนที่ p ดังนั้นให้ใช้บิตแรกบีบบิตที่สองกับรายการต้นฉบับนี้เพียงคู่ออกรายการตามลำดับจากสองรายการรายการเดิมจะเห็นได้ชัดอีกต่อไป แต่เราสูญเสียบิตพิเศษนี้ ตอนนี้เรากำหนดฟังก์ชั่นสำหรับ mapAccum ulator mapAccumL ของเราจะเหมือนกับแผนที่ แต่มีพารามิเตอร์ accumulator state ทำงานพิเศษซึ่งจะถูกส่งผ่านจาก mapping ก่อนหน้าไปยังแผนที่ถัดไปเมื่อแผนที่รันผ่าน list เราใช้ accumulator เป็นค่าเฉลี่ยเคลื่อนที่ของเรา และเป็นรายการของเราจะเกิดขึ้นจากองค์ประกอบที่มีเพียงซ้ายหน้าต่างบานเลื่อนและองค์ประกอบที่เพิ่งป้อนรายการที่เราเพิ่งซิปฟังก์ชันการเลื่อนของเราจะใช้หมายเลขแรก x ห่างจากค่าเฉลี่ยและเพิ่มจำนวนสอง y แล้วเรา pass ใหม่ตามและ return s หารด้วย p snd second ใช้เวลาเพียงแค่สมาชิกที่สองของ tuple คู่ซึ่งใช้ในการรับค่าผลตอบแทนที่สองของ mapAccumL เนื่องจาก mapAccumL จะคืน accumulator รวมทั้งรายการ mapped ของคุณไม่คุ้นเคยกับสัญลักษณ์เป็นผู้ประกอบการใบสมัครมัน doesn t จริงๆทำอะไร แต่ก็มีสิทธิในการเชื่อมโยงต่ำขวาเชื่อมโยงดังนั้นจึงหมายความว่าคุณสามารถออกจากวงเล็บจะทราบ LISPers, iefx เป็นเช่นเดียวกับ f x. Running ma 4 2 0, 4 0, 7 0, 6 0, 3 0, 8 0, 12 0, 9 0, 4 0, 1 0 ให้คะแนน 4 75, 5 0, 6 0, 7 25, 8 0, 8 25, 6 5 สำหรับสารละลายทั้งสองข้อ Oh และคุณจะต้องนำเข้ารายการโมดูลเพื่อรวบรวมโซลูชันอย่างใดอย่างหนึ่ง แดเนียลขอบคุณรหัสการเขียนเป็นเรื่องง่ายกว่าอธิบายมัน - คุณได้อธิบายความสำคัญของมันสองรายการสตรีมจะถูกเก็บไว้ในทั้งสองฟังก์ชั่นและได้รับหัวของพวกเขานำออกในระหว่างการทำซ้ำแต่ละครั้งหนึ่งรายการสตรีมทำหน้าที่เป็นคอลเลกชันหลักที่จะย้ำผ่านในขณะที่อื่น ๆ Stream รายการซึ่งเป็นชุดเดียวกันยกเว้นมีรอบระยะเวลาน้อยกว่านำออกใช้ในการคำนวณค่าเฉลี่ยเคลื่อนที่ใหม่ Walter Chang 24 สิงหาคมที่ 17 19 ภาษาโปรแกรม J อำนวยความสะดวกโปรแกรมเช่นค่าเฉลี่ยเคลื่อนที่แท้จริงมี ตัวอักษรน้อยกว่าในป้ายกำกับค่าเฉลี่ยเคลื่อนที่ของพวกเขาสำหรับค่าที่ระบุในคำถามนี้รวมถึงค่าชื่อที่นี่เป็นวิธีที่ง่ายในการระบุรหัสนี้เราสามารถอธิบายได้โดยการใช้ป้ายชื่อสำหรับส่วนประกอบตัวอย่างทั้งสองใช้ตรงโปรแกรมเดียวกันเท่านั้น ความแตกต่างคือการใช้ชื่อมากขึ้นในรูปแบบที่สองชื่อดังกล่าวสามารถช่วยให้ผู้อ่านที่ไม่ทราบ primaries. Lets J ดูบิตต่อไปในสิ่งที่เกิดขึ้นในโปรแกรมย่อยเฉลี่ย d enotes summation และหมายถึงส่วนต่างๆเช่น sign classical การนับจำนวนนับเป็นรายการที่ทำโดยโปรแกรมโดยรวมแล้วคือผลรวมของค่าที่หารด้วยจำนวนของค่าผลลัพธ์ที่ได้จากการคำนวณค่าเฉลี่ยเคลื่อนที่ที่เขียนขึ้นที่นี่ไม่รวมถึง ศูนย์ชั้นนำที่คาดว่าจะอยู่ในคำถามเดิมศูนย์เหล่านี้ไม่ได้เป็นส่วนหนึ่งของการคำนวณที่ตั้งใจไว้เทคนิคที่ใช้ในที่นี้เรียกว่าการเขียนโปรแกรมโดยปริยายมันค่อนข้างคล้ายกับรูปแบบที่ปราศจากจุดประสงค์ของการเขียนโปรแกรมเชิงหน้าที่ 26 สิงหาคม 10 เวลา 16 15 นี่คือ Clojure ทำท่าจะเป็นภาษาที่ใช้งานได้มากขึ้นนี่คือหางยาว - recursive, btw และรวมศูนย์ชั้นนำโดยปกติฉันใส่ชุดหรือพารามิเตอร์รายการล่าสุดเพื่อให้การทำงานง่ายขึ้นเพื่อแกง แต่ใน Clojure. is ยุ่งยากดังนั้นฉันมักจะ จบลงด้วยการทำ this. in ซึ่งในกรณีนี้ doesn t เรื่องจริงๆสิ่งที่สั่งซื้อพารามิเตอร์ go. answer 24 สิงหาคม 09 ที่ 4 56.Hi โจนาธานฉัน m สวยใหม่เพื่อการเขียนโปรแกรมการทำงานนี้ได้โปรดอธิบายให้ฉันว่า th เป็น recursive หาง - ขอบคุณ James P 24 สิงหาคมที่ 14 38. การทับทิมเกิดขึ้นในคำสั่งถ้าที่ตัวเลือกใดจะขึ้นอยู่กับ recur นี้จะคำนวณทุกพารามิเตอร์แรกเท่านั้น recurse แล้วคำตอบจะเป็นผล recur As ผลเป็นผลเดียวกันส่งกลับโดยการเรียกซ้ำที่ไม่มีการคำนวณอื่น ๆ นี้เป็นหาง recursive Daniel C Sobral 24 สิงหาคมที่ 15 20 เช่นนี้ทำให้การใช้รัฐเนื่องจากฉันเป็นทางออกในทางปฏิบัติในกรณีนี้และ ปิดเพื่อสร้าง windowing เฉลี่ย function. It ยังคงทำงานในความรู้สึกของการใช้ฟังก์ชันชั้นแรกแม้ว่าจะไม่ด้านผลฟรีสองภาษาที่คุณกล่าวถึงการทำงานทั้งด้านบนของ JVM และทำให้ทั้งสองอนุญาตให้ state - การจัดการเมื่อ needed. answered 24 สิงหาคมที่ 1 55 โซลูชันนี้อยู่ใน Haskell ซึ่งเป็นที่คุ้นเคยกับ me. answer 24 สิงหาคม 09 ที่ 10 23.I ชอบการใช้คำพูดการแข่งขันฉันพยายามทำสิ่งที่คล้ายกัน แต่ couldn t ค่อนข้างจะทำให้ทุกอย่างมี James P 24 ส. ค. 09 ที่ 14 39. รุ่นสั้น Clojure ที่มีข้อดีของการเป็นรายการ O ยาวโดยไม่คำนึงถึงระยะเวลาของคุณนี้ใช้ประโยชน์จากข้อเท็จจริงที่ว่าคุณสามารถคำนวณผลรวมของช่วงของตัวเลขโดยการสร้างผลรวมสะสมของลำดับเช่น 1 2 3 4 5 - 0 1 3 6 10 15 แล้วลบสองตัวเลขที่มีการชดเชยเท่ากับระยะเวลาของคุณโดยสิ้นเชิงพรรคและใหม่เพื่อการเขียนโปรแกรมการทำงานมากเกินไปฉันมาถึงการแก้ปัญหานี้มีฟังก์ชั่นด้านในฉันนำความคิดไป แบ่งรายการทั้งหมดตาม len ระยะล่วงหน้าแล้วฉันจะสร้างผลรวมที่จะเริ่มต้นด้วยสำหรับ len-first-elements และฉันสร้างแรกองค์ประกอบที่ไม่ถูกต้อง 0 0, 0 0. แล้วฉัน recursively ลบก่อนและเพิ่มมูลค่าสุดท้าย ในท้ายที่สุดฉันจะบอกสิ่งที่ทั้งตัว. ตอบเมื่อวันที่ 29 เม. ย. ที่ผ่านมาที่ 19 28. ใน hseppode ของ Haskell ตอนนี้หนึ่งควรเป็นนามธรรม 4 out. answered 23 กรกฎาคม 13 ที่ 13 45 คีย์เป็นฟังก์ชันหางที่แผนที่รายการในรายการของสำเนาของรายการเดิมกับทรัพย์สินที่องค์ประกอบ n - th ของผล หายไป n-1 elements. We แรกใช้ fmap เฉลี่ยไป n ผลซึ่งหมายความว่าเราใช้คำนำหน้า n ยาวจากรายการย่อยและคำนวณค่าเฉลี่ยของมันถ้าความยาวของรายการที่เรา avg ing ไม่ n, จากนั้นเราจะไม่คำนวณค่าเฉลี่ยเนื่องจากไม่มีการกำหนดในกรณีนี้เราจะคืนค่าอะไรถ้าเป็นเราทำและห่อไว้ใน Just Finally เราเรียกใช้ catMaybes ซึ่งเป็นผลมาจาก fmap avg ใช้เวลา n เพื่อกำจัดบางที type. answered Oct 21 13 at 1 29. ฉันรู้สึกประหลาดใจและผิดหวังจากผลการปฏิบัติงานของสิ่งที่ดูเหมือนจะเป็นที่รู้จักมากที่สุดในการแก้ปัญหา Clojure, JamesCunningham s lazy-seq solutions. So นี่เป็นการรวมกันของ James solution ด้วยความคิดของ s adaptable fast - การยกกำลังสองเพื่อย้าย sums. Edit นี้หนึ่งขึ้นอยู่กับวิธีการแก้ปัญหาของ mikera - จะเร็วยิ่งขึ้นตอบ Jul 22 13 ที่ 19 21.Your Answer.2017 Stack Exchange, Inc. Clojure การเขียนโปรแกรมตามตัวอย่างนี้มีวัตถุประสงค์เพื่อเป็นมือแรกดู Clojure หากคุณต้องการลองตัวอย่างที่คุณไปแล้วคุณอาจต้องการตั้งค่าสภาพแวดล้อมการทำงานตาม เพื่อให้คุณสามารถเห็นผลลัพธ์ของโปรแกรมตัวอย่างรหัสโปรแกรมจะถูกเขียนในรูปแบบฟอร์มที่อยู่ในวงเล็บหมายถึงฟังก์ชัน calls. calls ฟังก์ชันกับอาร์กิวเมนต์ 1 2 3 และส่งกลับค่า 6 ผลรวมของอาร์กิวเมนต์ฟังก์ชันใหม่สามารถกำหนดโดยใช้ defn. Here x และ y เป็นสัญลักษณ์ที่แสดงอาร์กิวเมนต์อินพุตฟังก์ชันถูกเรียกเพื่อหารผลรวมของ x และ y โดย 2 โปรดสังเกตว่าฟอร์มอยู่เสมอในโน้ตคำนำหน้าที่พร้อมด้วยอาร์กิวเมนต์ที่ตามมาตอนนี้ค่าเฉลี่ยสามารถเรียกใช้ as. and จะกลับมา 4 ในตัวอย่างนี้ค่าเฉลี่ยคือสัญลักษณ์ที่มีค่าเป็นฟังก์ชันอ้างถึงคำอธิบายโดยละเอียดเกี่ยวกับรูปแบบ Clojure ทำให้สามารถเข้าถึง JVM ได้ง่ายซึ่งเรียกใช้วิธีการแสดงผลซึ่งสร้างโครงสร้างใหม่ Jframe หมายเหตุว่าการหยุดทำงานแบบเต็มรูปแบบ ก่อนที่ วิธีการเรียกและหยุดเต็มหลังจากที่การก่อสร้างดูฟังก์ชั่นสามารถส่งผ่านไปยัง function. returns อื่น ๆ 7 7 แผนที่เป็นฟังก์ชันที่ใช้เวลาทำงานอื่นและเรียกมันด้วยอาร์กิวเมนต์ที่นำมาจากคอลเลกชันต่อไปนี้ในกรณีของเราเราได้ให้ฟังก์ชั่น และสองเวกเตอร์ของจำนวนเต็มผลคือรายการผลลัพธ์ของการเรียกด้วยอาร์กิวเมนต์ที่นำมาจากเวกเตอร์การใช้ฟังก์ชันเป็นอาร์กิวเมนต์ไปยังฟังก์ชันอื่น ๆ มีประสิทธิภาพมากเราสามารถใช้ฟังก์ชันค่าเฉลี่ยที่กำหนดไว้ก่อนหน้านี้ของเราพร้อมกับแผนที่เช่น. ส่งกลับ 5 2 7 2 9 2 เราเห็นที่นี่ว่า Clojure สนับสนุนอัตราส่วนเป็นชนิดข้อมูลหมายถึงสำหรับ list. Functions เต็มรูปแบบยังสามารถกลับ functions. Here อื่นจะกลับฟังก์ชันใหม่ที่ใช้เวลา 1 อาร์กิวเมนต์และเพิ่ม x เพื่อ it. returns ฟังก์ชันที่สามารถเรียกว่า กับอาร์กิวเมนต์ 1 และจะเพิ่ม 5 ไป it. returns 6 7 8 9 10 เราเรียกแผนที่ที่มีผลของ addx ซึ่งเป็นฟังก์ชันที่ใช้อาร์กิวเมนต์และเพิ่ม 5 ฟังก์ชันที่ถูกเรียกในรายการหมายเลขที่เราให้มา คือ ชวเลขวิธีการสร้างฟังก์ชั่นที่ไม่มีชื่อสร้างฟังก์ชั่นที่เรียกด้วยอาร์กิวเมนต์ที่สอง 1 และ 2 จะเพิ่ม 5 ในรายการตัวเลขที่เราให้มาความสามารถในการส่งผ่านและสร้างฟังก์ชันแบบไดนามิกจะเรียกว่าฟังก์ชันชั้นหนึ่งการเขียนโปรแกรมเชิงฟังก์ชัน ถือว่าการคำนวณเป็นค่าของฟังก์ชันทางคณิตศาสตร์และหลีกเลี่ยงข้อมูลที่เป็นของรัฐและไม่แน่นอนในภาษาที่จำเป็นคุณมักจะสร้างตัวแปรและเปลี่ยนค่าของพวกเขาอย่างสม่ำเสมอใน Clojure คุณจะส่งกลับผลลัพธ์ใหม่โดยไม่ต้องแก้ไขสิ่งที่มีอยู่ก่อนหน้าที่ใช้งานได้โดยไม่มีผลข้างเคียง Edit. Function side ผลกระทบที่สามารถเปลี่ยนค่าของปัจจัยการผลิตการเปลี่ยนแปลงข้อมูลทั่วโลกหรือการดำเนินการ IO. Imperative void moveplayer p, x, y. updates วัตถุผู้เล่นที่มีสถานที่ใหม่ผู้เล่นระดับชั้นนำทาง Oriented, mutates วัตถุที่มีอยู่ functionbook moveplayer oldp x ya ผู้เล่นใหม่จะถูกส่งกลับผู้เล่นเก่าจะได้รับผลกระทบความจำเป็นที่คุณจะรู้ว่า p มีการเปลี่ยนแปลงเนื่องจากคำแนะนำชื่อฟังก์ชันมันและมัน mig ht มีการเปลี่ยนแปลงสิ่งต่างๆเช่นข้อมูลโลกบางส่วนเช่นกันใน FP oldp ได้รับการเก็บรักษาไว้คุณ don t ต้องกังวลเกี่ยวกับสิ่งที่เกิดขึ้นกับมันหรือโลก - ไม่มีอะไรสามารถเปลี่ยนแปลงได้และเป็นที่ชัดเจนว่าผู้เล่นใหม่จะถูกส่งกลับอันเป็นผลมาจากการย้าย ภาษาบังคับว่าไม่มีผลข้างเคียงเพื่อให้คุณสามารถอนุมานอินเทอร์เฟซการทำงานโดยตรงจากแผนที่ไปยังเอาต์พุตซึ่งทำให้ง่ายต่อการสร้างและคิดถึงกรณีทดสอบสองเธรดสามารถทำงานพร้อมกันได้ในเวลาเดียวกัน ข้อมูลที่ไม่มีความเสี่ยงของพวกเขาเสียหายกันเนื่องจากข้อมูลจะไม่ถูกเปลี่ยนแปลงโดยคำนึงถึงการลบรายการออกจากรายการโซลูชันที่จำเป็นจะแก้ไขรายการในสถานที่โซลูชันการทำงานจะแสดงรายการใหม่โดยสมบูรณ์ออกจากต้นฉบับในตำแหน่ง เสียงบนพื้นผิวที่จะสิ้นเปลือง แต่มีหลายวิธีที่จะเพิ่มประสิทธิภาพโดยคอมไพเลอร์จะมีประสิทธิภาพมากรหัสโดยไม่ต้องตัวแปรสำหรับคนที่ใช้ในการเขียนโปรแกรมที่จำเป็นสามารถใช้เวลา al ittle เริ่มใช้นี่คือคำแนะนำอย่างรวดเร็วในการแปลงรหัสลักษณะตัวแปรเป็นโค้ดที่ทำงานคุณต้องการสะสมการเปลี่ยนแปลงบางอย่างแก้ไขแก้ไขเรียงลำดับของสิ่งเหล่านี้ลงในแบบฟอร์มที่ไม่ต้องใช้ตัวแปรใด ๆ ช่วง 1 100 2 สร้างลำดับขี้เกียจของตัวเลข 1 3 5 7 99 1 เป็นจุดเริ่มต้น 100 เป็นจุดสิ้นสุด 2 คือขั้นตอนลดการเรียกฟังก์ชันครั้งแรกที่เรียกด้วยสองอาร์กิวเมนต์สองหมายเลขแรกที่จัดทำโดยช่วงจากนั้น มันเรียกอีกครั้งกับผลก่อนหน้านี้และหมายเลขถัดไปจนกว่าตัวเลขทั้งหมดจะหมด Clojure มีจำนวนมากสนับสนุนลำดับ sequences คอลเลกชันและการดำเนินงานระดับสูงเมื่อคุณเรียนรู้พวกเขาคุณจะพบวิธีการแสดงออกมากในการเขียนงานเช่น this. You ต้องการย้ำแทนที่จะใช้ loop recur สร้าง Editputes factorial ของ 5 รูปแบบพิเศษวงกำหนดผูกตามด้วยการแสดงออกที่จะประเมินในตัวอย่างนี้ 5 จะผูกพันกับ i และ 1 จะผูกพันกับ acc ถ้ารูปแบบพิเศษแล้วทดสอบว่า i เป็น เท่ากับ 0 เพราะมันไม่เท่ากับ 0 recur จะคืนค่าใหม่ให้กับ i และ acc ก่อนที่จะกลับการควบคุมกลับไปด้านบนของลูปเพื่อที่จะประเมินร่างกายของนิพจน์ใหม่ Decmented i dec i จะฟื้นตัวไปที่ i และ ผลิตภัณฑ์ของ acc i acc i คือ rebound to acc ลูปนี้เรียกว่า recursively จนกว่าฉันจะเท่ากับ 0 acc เก็บผลคูณแต่ละค่าเอาไว้สังเกตว่า binding จะทำงานเหมือนตัวแปรนอกจากนี้ recur สามารถกำหนดเป้าหมายทั้ง loop หรือ definition ของฟังก์ชันได้ ตัวอย่างข้างต้นฟังก์ชั่นแฟกทอเรียลสามารถใช้อาร์กิวเมนต์ 1 อาร์กิวเมนต์ซึ่งส่งผลให้เกิดการประเมินผลหรือส่งข้อโต้แย้ง 2 ข้อในการประเมินค่าของ. recur มีความสำคัญเนื่องจากจะรีเฟอร์ฟังก์ชันป้อนข้อมูลของฟังก์ชันแทนการเพิ่มการเรียกซ้ำเพื่อสแต็ค แทนค่า factorial dec n acc n เราจะมีลักษณะคล้ายกัน แต่สำหรับค่าขนาดใหญ่ n อาจทำให้เกิด stack overflow ได้ด้วยหมายเหตุเราได้นำนิยามสองมาใช้กับ factorial หนึ่งอาร์กิวเมนต์หนึ่งตัวและอาร์กิวเมนต์อื่นที่มีอาร์กิวเมนต์สองตัว หนึ่งอาร์กิวเมนต์รุ่นซึ่งได้รับการแปลเป็นรูปแบบอาร์กิวเมนต์สองแบบสำหรับการประเมินผล arity ของฟังก์ชันคือจำนวนอาร์กิวเมนต์ที่ฟังก์ชันใช้แน่นอนเราสามารถเขียนคำนิยามได้ง่ายขึ้น ไปยังตัวอย่างก่อนหน้านี้รวมกันแปลกคุณต้องบันทึกผลและใช้มันหลายครั้ง Edit. There เป็นแมโครที่มีประโยชน์ให้ซึ่งผูกสัญลักษณ์กับค่าสำหรับ use. in ท้องถิ่นนี้ให้รูปแบบจำนวนสุ่มระหว่าง 0 และ 0 8 คือ 0 2 จะถูกเพิ่มและผลลัพธ์จะถูกผูกไว้กับสัญลักษณ์ g สีถูกสร้างขึ้นด้วยค่าสีน้ำเงินสีแดงของ g ซึ่งจะเป็นระดับความเข้มของสีเทาตั้งแต่ 0 ถึง 2 คุณต้องการสร้างการโทรหลายวิธี เกี่ยวกับวัตถุเดียวกัน Edit. Using ห้องสมุด java มักจะทำให้คุณเข้าสู่สถานการณ์ที่คุณต้องการใช้ตัวแปรท้องถิ่นเก็บในใจ doto สิ่งที่ดีเกี่ยวกับ doto คือการส่งกลับวัตถุหลังจากใช้หลาย calls. Mutating ตัวแปรรัฐถาวร Edit. Clojure สนับสนุนประเภท mutable มาก แต่ก็เป็นสิ่งสำคัญที่จะทราบความแตกต่างระหว่างพวกเขาและวิธีการทำงานประเภทให้เป็น refs ตัวแทนอะตอมและ vars. Refs เป็นเหมือน ref เซลล์ใน ML, กล่องใน Scheme หรือคำแนะนำในภาษาอื่น ๆ เป็น กล่องที่คุณสามารถเปลี่ยนเนื้อหาของ Bu t แตกต่างจากภาษาอื่น ๆ บิดคือคุณสามารถทำการเปลี่ยนแปลงภายในของรายการเพื่อให้แน่ใจว่าทั้งสองหัวข้อไม่สามารถมีความขัดแย้งเมื่อปรับปรุงหรือเข้าถึงสิ่งที่เก็บอยู่ภายใน ref. declares r จะอ้างอิงกับค่าเริ่มต้นของ nil. sets r ถึง 5 ใน transaction. gets ค่าของ r ซึ่งเป็น 5 โปรดทราบว่า r คือการชวเลขสำหรับ deref r และใช้งานได้กับ Clojures mutable types ทั้งหมด r คือ ref ไม่ใช่ valueAgents Edit. Agents มีการแก้ไขโดยฟังก์ชัน asynchronously คุณส่งฟังก์ชันไปยัง agent ซึ่งจะใช้ฟังก์ชันดังกล่าวในภายหลังกับค่าปัจจุบันของมัน asynchronous เนื่องจากการเรียกส่งผลตอบแทนทันทีฟังก์ชันถูกจัดคิวไว้ในชุดเธรดสำหรับการเรียกใช้งาน - threading ในตัวอย่างนี้เรากำหนดเอเจนต์ที่มีค่าเริ่มต้น 1 เราได้ส่งเอเจนต์ inc ฟังก์ชันซึ่งเพิ่มอาร์กิวเมนต์ตอนนี้คิวส่งที่ทำงานเพื่อเรียกใช้โดยพูลเธรดจะรอจนกว่าจะมีการทำงานทั้งหมดที่ค้างอยู่ในเอเจนต์เอช ave เสร็จส่งกลับค่าของตัวแทนของเราซึ่งขณะนี้ 2 เนื่องจาก 1 ถูก incrementedAtoms มีการปรับเปลี่ยนโดยฟังก์ชัน synchronously คุณเรียก swap และฟังก์ชันที่คุณจัดหาจะใช้กับค่าของอะตอมก่อน swap returns ทราบว่า swap ส่งกลับ ผลลัพธ์ของฟังก์ชันที่ถูกนำมาใช้กับค่าอะตอมปัจจุบัน Refs จะถูกประสานกันในขณะที่ตัวแทนและอะตอมไม่ได้รับการจัดระเบียบซึ่งหมายความว่าในสภาวะแวดล้อมแบบมัลติเธรด refs ได้รับการแก้ไขในการทำธุรกรรมซึ่งทำให้มั่นใจได้ว่ามีเพียงเธรดเดียวที่สามารถปรับเปลี่ยนค่าได้ที่ a time ในขณะที่อะตอมและตัวแทนจัดลำดับการทำงานของการเปลี่ยนแปลงเพื่อให้แน่ใจว่าการเปลี่ยนแปลงเกิดขึ้น atomically ทั้งหมดของพวกเขามีความปลอดภัยพวกเขาเพียงแค่ใช้กลยุทธ์ที่แตกต่างเพื่อให้ safety. Vars นี้เหมือนตัวแปรทั่วโลกในภาษาอื่น ๆ รากผูกพันเป็นค่าเริ่มต้นเริ่มต้นที่ ที่ใช้ร่วมกันโดยเธรดทั้งหมดการสร้างการผูกทำหน้าที่เสมือนว่ามีการเปลี่ยนแปลง var แต่จะคืนค่าโดยอัตโนมัติไปเป็นค่าก่อนหน้าเมื่อออกจากขอบเขตของ const binding ruct. Establishes Var สิ่งที่มีค่า 5 ประกาศฟังก์ชันจริงกำหนดให้เป็น Vars คุณควรหลีกเลี่ยงการใช้ def และโดยเฉพาะอย่างยิ่งหลีกเลี่ยงการตั้งค่าผูกประกาศแล้วกับ def ต่อไปเรียก def สิ่งบางอย่าง 6 ไม่ใช่การดำเนินงานด้ายปลอดภัย ทำไมถึงไม่มี Clojure มีตัวแปรท้องถิ่นเกิดขึ้นบ่อยครั้งการกลายพันธุ์ในท้องถิ่นเป็นเรื่องยากที่จะอธิบายถึงสาเหตุของการกลายพันธุ์ทั่วโลกโดยไม่ขึ้นกับ concurrency ตัวอย่างเช่น Java ทั่วไปสำหรับลูปที่กำหนดค่า Vars ภายในตัวอื่น ๆ และมีการแบ่งตัวถ้าต้องใช้ความคิดมากกว่า ในขั้นต้นเพื่อสร้างโซลูชันที่ไม่จำเป็นต้องใช้ตัวแปรโปรดลองใช้ความพยายามนี้ - จะคืนให้คุณหลายครั้งกว่าอย่างไรก็ตามเพื่อสนับสนุนการแปลโดยตรงของอัลกอริทึมที่จำเป็นมีแมโครที่มีประโยชน์ซึ่งเรียกว่า local-vars ซึ่งจะประกาศ vars ภายในซึ่ง สามารถเปลี่ยนได้ด้วย var-set และอ่านด้วย var-get หรือ shorthand. This เป็นตัวแปร factorial variables ที่คุณสามารถดูได้ไม่ดีเท่ารุ่นที่อธิบายไว้ก่อนหน้านี้และแสดงให้เห็นถึงการผูก var แบบ local ฟังก์ชันจะสมบูรณ์ปลอดภัยในการโทรในสภาพแวดล้อมแบบมัลติเธรดเนื่องจากตัวแปรเป็น local อย่างไรก็ตามตัวแปรท้องถิ่นไม่สามารถอนุญาตให้มีการรั่วไหลออกจากขอบเขตได้ Varuses Var ไม่มีข้อ จำกัด เหตุผลคือ t หมวก f ส่งกลับค่าฟังก์ชันใหม่ที่เพิ่ม 2 เป็นตัวแปรท้องถิ่นที่กำหนดไว้ใน f ดังนั้นฟังก์ชันที่ส่งคืนจะพยายามเก็บค่าตัวแปรท้องถิ่นของ f ตอนนี้ตัวแปรท้องถิ่นอาจมีการเปลี่ยนแปลงได้ แต่ถ้ามีการเปลี่ยนแปลงเกิดขึ้นในสภาวะแวดล้อมแบบมัลติเธรด และตัวแปรที่มีการรั่วไหลออกไปนอกขอบเขตเดิมการเปลี่ยนแปลงจะไม่เป็นแบบใด ๆ อีกต่อไปการปิดเป็นคำที่ใช้เมื่อสัญลักษณ์ถูกเก็บไว้นอกคำจำกัดความของพวกเขาที่นี่เราได้สร้างฟังก์ชันสองอย่างซึ่งทั้งสองเข้าถึงความลับ ref เราสร้างมันขึ้นภายในปล่อย ดังนั้นความลับไม่สามารถมองเห็นได้ในขอบเขตปัจจุบันของเราอีกต่อไปสาเหตุที่ไม่สามารถแก้ไขความลับของสัญลักษณ์ในบริบทนี้อย่างไรก็ตามหน้าที่ของตัวเองได้เก็บความลับเอาไว้และสามารถใช้ในการสื่อสารได้ Clojure ค่าเฉลี่ยเคลื่อนที่จาก Java ไปเป็น Clojure. Clojure มีการทำงานกับคิวฉัน don t รู้ว่าทำไมมัน doesn t มีแมโครอ่าน แต่ผลงานดีและส่งกลับคุณคอลเลกชัน Clojure คุณสามารถจัดการกับข้อเสียและ peek. You สามารถเริ่มต้นด้วย คิวที่ว่างเปล่ากับหรือแทรกรายการของคุณในนวกรรมิกฉันเขียนเนื้อหาบางอย่างเกี่ยวกับเรื่องนี้ในโปรตุเกสถ้าคุณมีความสนใจใด ๆ ใน 20 07 2014 ที่ 08 48 Cecil Westerhof wrote ฉันเพิ่งสงสัยว่าเป็นวิธีที่ดีที่สุดในการแปลนี้ เพื่อ Clojure ขณะนี้ Clojure ไม่มีคิวฉันควรใช้ Java โทรหรือมีวิธีที่ดีกว่า Cecil Westerhof - คุณได้รับข้อความนี้เนื่องจากคุณสมัครสมาชิกกลุ่ม Google Groups Clojure เพื่อโพสต์ไป กลุ่มนี้ส่งอีเมลไปยังโปรดทราบว่าโพสต์จากสมาชิกใหม่จะได้รับการตรวจสอบ - โปรดอดใจรอกับโพสต์ครั้งแรกของคุณหากต้องการยกเลิกการรับข่าวสารจากกลุ่มนี้ให้ส่งอีเมลไปที่ clojure สำหรับตัวเลือกเพิ่มเติมโปรดไปที่กลุ่มนี้ที่ --- คุณได้รับข้อความนี้เนื่องจากคุณเป็น สมัครสมาชิก Google Groups Clojure grou p ในการยกเลิกการเป็นสมาชิกจากกลุ่มนี้และหยุดรับอีเมลจากอีเมลให้ส่งอีเมลไปที่สำหรับตัวเลือกเพิ่มเติมโปรดไปที่----คุณได้รับข้อความนี้เนื่องจากคุณสมัครสมาชิกกลุ่ม Google Groups Clojure เพื่อโพสต์ไปยังกลุ่มนี้ส่งอีเมลไปที่หมายเหตุ โพสต์จากสมาชิกใหม่จะได้รับการตรวจสอบ - โปรดอดใจรอกับโพสต์ครั้งแรกของคุณหากต้องการยกเลิกการรับข่าวสารจากกลุ่มนี้ให้ส่งอีเมลไปที่ clojure หากต้องการข้อมูลเพิ่มเติมโปรดเข้าสู่กลุ่มนี้ที่ --- คุณได้รับข้อความนี้เนื่องจากคุณสมัครสมาชิกกลุ่ม Google Clojure จาก To ยกเลิกการเป็นสมาชิกจากกลุ่มนี้และหยุดรับอีเมลจากนั้นส่งอีเมลไปที่ For options เพิ่มเติมเยี่ยมชม Mike Fikes มีการติดตั้งคิวเป็นจริงการใช้คิวนี้เป็นวิธีที่จะใช้สำหรับปัญหาของคุณ defn ให้ย้ายโดยเฉลี่ยคิว n atom defn update-moving-average-queue old-queue next-value ปล่อยให้ current-total current-total old-queue ค่าถัดไปของค่าเก่า conj old-values ​​old-queue ค่าถัดไปถ้า count old-values ​​length old-queue ให้เป็นปัจจุบัน รวมทั้งหมด - ปัจจุบัน - รวมค่าเก่า - เก่าทั้งหมด นี่คือวิธีที่จะใช้สำหรับปัญหาของคุณ defn make-moving-average-queue n อะตอมปัจจุบันรวม 0 0 ค่าเก่า defn update-moving-average-queue old-queue next-value ปล่อยให้ current-total current-total old-queue ค่าถัดไปของค่าเก่าค่าเก่า - เก่าเก็บค่า old-queue next-value ถ้า count old-values ​​length old-queue let ปัจจุบัน - รวม - ปัจจุบัน - รวมค่าเก่า - ค่าเก่า - ค่าเก่า - ค่า assoc เก่า - คิวปัจจุบัน - รวมปัจจุบัน - รวมเก่า - ค่าเก่า - ค่า assoc เก่า - คิวปัจจุบัน - ทั้งหมดปัจจุบัน - รวมค่าเก่าเก่า - ค่า . กำหนดค่าเฉลี่ยถัดไปของค่าเฉลี่ยของค่าเฉลี่ยของค่าเฉลี่ยของค่าเฉลี่ยที่เคลื่อนที่โดยเฉลี่ยเก่า - คิว - คิวใหม่ - ค่าคิวใหม่ - ค่าคิวใหม่ กำหนดคิว -06 ทำให้ย้ายโดยเฉลี่ยคิว 6. ปัจจัยการผลิต def-06 20 22 21 24 24 25 25 26 26 26 26 27 28 27 29 27 25 24 อินพุทอินพุต doseq-06 println เคลื่อนที่เฉลี่ยลำดับ -06 อินพุต def คิว -10 ทำให้เคลื่อนไหวโดยเฉลี่ยคิว 10. ปัจจัยการผลิต def-10 20 22 24 25 23 26 28 26 29 27 28 30 27 29 28 อินพุตอินพุต doseq-10 println เคลื่อนที่เฉลี่ยคิว -10- คุณ - ได้รับข้อความนี้เนื่องจากคุณสมัครสมาชิกกลุ่ม Google Groups Clojure เพื่อโพสต์ไปยังกลุ่มนี้ส่งอีเมลไปยังโปรดทราบว่าโพสต์จากสมาชิกใหม่จะได้รับการตรวจสอบโปรดอดใจรอกับโพสต์ครั้งแรกของคุณหากต้องการยกเลิกการรับข่าวสารจากกลุ่มนี้ให้ส่งอีเมลไปที่ clojure สำหรับข้อมูลเพิ่มเติม ไปที่กลุ่มนี้ที่ --- คุณได้รับข้อความนี้เนื่องจากคุณสมัครสมาชิกกลุ่ม Google Groups Clojure เพื่อยกเลิกการรับข่าวสารจากกลุ่มนี้และหยุดรับอีเมลจากอีเมลนั้นส่งอีเมลไปที่ For more options ไปที่ Mike Fikes Hey Cecil, นอกเหนือจากการใช้ peek แทนแรกตามที่ระบุไว้โดย Plinio ฟังก์ชัน moving average ข้างต้นใช้ชื่อที่ไม่ดีบางอย่างใน hindsight โดยเฉพาะอย่างยิ่งชื่อพารามิเตอร์คิวเก่าฉันขอแนะนำให้ตั้งชื่อคิวมันเป็นหมายถึงอะตอมคุณสามารถ แม้กระทั่งการตั้งชื่อฟังก์ชั่นการเคลื่อนที่เฉลี่ย - คุณได้รับ th เป็นข้อความเนื่องจากคุณสมัครสมาชิกกลุ่ม Google Groups Clojure เพื่อโพสต์ไปยังกลุ่มนี้ส่งอีเมลไปยังอีเมลที่ได้รับการป้องกันโปรดทราบว่าโพสต์จากสมาชิกใหม่จะมีขึ้นในวันที่ 20 กรกฎาคม 2014 เวลา 1 น. 52. นอกจากการใช้ peek แทนที่จะเป็นครั้งแรก ตามที่ระบุโดย Plinio ฟังก์ชัน moving average ข้างต้นใช้ชื่อที่ไม่ดีบางอย่างใน hindsight โดยเฉพาะอย่างยิ่งชื่อพารามิเตอร์แถวเก่าฉัน d แนะนำการตั้งชื่อคิวมันเป็นหมายถึงอะตอมคุณสามารถพิจารณาตั้งชื่อฟังก์ชันเฉลี่ยเคลื่อนที่ - คุณได้รับข้อความนี้เนื่องจากคุณสมัครสมาชิกกลุ่ม Google Groups Clojure หากต้องการโพสต์ไปที่กลุ่มนี้ส่งอีเมลไปที่โปรดทราบว่าโพสต์จากสมาชิกใหม่จะได้รับการตรวจสอบ - โปรดอดทนกับโพสต์ครั้งแรกของคุณหากต้องการยกเลิกการรับข่าวสารจากกลุ่มนี้ให้ส่งอีเมลไปที่ clojure สำหรับตัวเลือกเพิ่มเติมโปรดไปที่กลุ่มนี้ที่ --- คุณได้รับข้อความนี้เนื่องจากคุณสมัครเป็นสมาชิกกลุ่ม Google Groups Clojure เพื่อยกเลิกการรับข่าวสารจากกลุ่มนี้และหยุดรับอีเมลจากอีเมลนั้นส่งอีเมลไปที่ For more options แวะไปที่. P แต่ค่าเฉลี่ยเคลื่อนที่ถ่วงน้ำหนักที่ชี้แจงไม่จำเป็นต้องใช้สถานะอื่นนอกเหนือจากค่าที่กำหนดปัจจุบัน elma alpha fn avg new - 1 alpha avg alpha new jony - คุณได้รับข้อความนี้เนื่องจากคุณสมัครรับข้อมูล กลุ่ม Google Groups Clojure หากต้องการโพสต์ไปยังกลุ่มนี้ส่งอีเมลไปยังอีเมลที่ได้รับการป้องกันโปรดทราบว่าโพสต์จากสมาชิกใหม่จะได้รับการตรวจสอบโปรดอดใจรอกับโพสต์ครั้งแรกของคุณหากต้องการยกเลิกการรับข่าวสารจากกลุ่มนี้โปรดส่งเมื่อวันอาทิตย์ที่ 20 กรกฎาคม 2014 12 48 19 UTC 1, Cecil Westerhof wrote. or มีวิธีที่ดีกว่าไม่น่าจะเป็นคำตอบที่คุณกำลังมองหา แต่ค่าเฉลี่ยเคลื่อนที่ที่ถ่วงน้ำหนักแบบยกกำลังไม่จำเป็นต้องใช้สถานะอื่นนอกเหนือจากค่าปัจจุบัน คุณได้รับข้อความนี้เนื่องจากคุณสมัครเป็นสมาชิกกลุ่ม Google Groups Clojure หากต้องการโพสต์ไปที่กลุ่มนี้ส่งอีเมลไปที่โปรดทราบว่าโพสต์จากสมาชิกใหม่จะได้รับการตรวจสอบ - โปรดอดทนรอ with your first post To unsubscribe from this group, send email to clojure For more options, visit this group at --- You received this message because you are subscribed to the Google Groups Clojure group To unsubscribe from this group and stop receiving emails from it , send an email to For more options, visit.

Comments