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

Lambdas เป็นฟังก์ชันที่ไม่ระบุตัวตน (กล่าวคือไม่มีตัวระบุเช่นเมธอดในคลาส) ซึ่งสามารถใช้ได้ในภาษาโปรแกรมที่หลากหลาย

14
อะไรทำให้เกิดความนิยมของฟังก์ชั่นแลมบ์ดาในภาษาโปรแกรมกระแสหลักที่ทันสมัย?
ในไม่กี่ปีที่ผ่านมาฟังก์ชั่นนิรนาม (ฟังก์ชั่น AKA แลมบ์ดา) ได้กลายเป็นภาษาที่ได้รับความนิยมอย่างมากและเกือบทุกภาษาหลัก / การเขียนโปรแกรมหลักได้แนะนำพวกเขาหรือมีการวางแผนที่จะแนะนำพวกเขาในการแก้ไขมาตรฐาน แต่ฟังก์ชั่นนิรนามเป็นแนวคิดที่เก่าแก่และเป็นที่รู้จักมากในด้านคณิตศาสตร์และวิทยาการคอมพิวเตอร์ (คิดค้นโดยนักคณิตศาสตร์ Alonzo Church รอบปี 1936 และใช้โดยภาษาการเขียนโปรแกรม Lisp มาตั้งแต่ปี 1958 ดูที่นี่ ) เหตุใดจึงไม่มีภาษาโปรแกรมหลักในปัจจุบัน (หลายภาษาซึ่งมีต้นกำเนิดเมื่อ 15 ถึง 20 ปีก่อน) รองรับฟังก์ชั่นแลมบ์ดาตั้งแต่เริ่มแรกและนำมาใช้ภายหลังเท่านั้น และสิ่งที่กระตุ้นให้เกิดการยอมรับฟังก์ชั่นที่ไม่ระบุชื่อขนาดใหญ่ในไม่กี่ปีที่ผ่านมา? มีเหตุการณ์เฉพาะความต้องการใหม่หรือเทคนิคการเขียนโปรแกรมที่เริ่มปรากฏการณ์นี้หรือไม่? โน๊ตสำคัญ จุดเน้นของคำถามนี้คือการแนะนำฟังก์ชั่นที่ไม่ระบุชื่อในภาษาสมัยใหม่กระแสหลัก (และอาจมีข้อยกเว้นเล็กน้อยภาษาที่ไม่สามารถใช้งานได้) นอกจากนี้โปรดทราบว่าฟังก์ชั่นที่ไม่ระบุชื่อ (บล็อก) มีอยู่ใน Smalltalk ซึ่งไม่ใช่ภาษาที่ใช้งานได้และฟังก์ชั่นที่มีชื่อปกตินั้นมีอยู่ในภาษาขั้นตอนเช่น C และ Pascal เป็นเวลานาน โปรดอย่าทำให้คำตอบของคุณมากเกินไปโดยการพูดถึง "การยอมรับกระบวนทัศน์การทำงานและประโยชน์ของมัน" เพราะนี่ไม่ใช่หัวข้อของคำถาม

3
แลมบ์ดาคืออะไรและทำไมจึงมีประโยชน์ [ปิด]
จนถึงตอนนี้ฉันได้ยินเกี่ยวกับ: แลมบ์ดาแคลคูลัส การเขียนโปรแกรมแลมบ์ดา นิพจน์แลมบ์ดา ฟังก์ชั่นแลมบ์ดา ซึ่งดูเหมือนว่าทั้งหมดจะเกี่ยวข้องกับการเขียนโปรแกรมการทำงาน ... เห็นได้ชัดว่ามันจะถูกรวมเข้ากับ C ++ 1x ดังนั้นฉันอาจเข้าใจได้ดีขึ้นในตอนนี้: http://en.wikipedia.org/wiki/C%2B%2B0x#Lambda_functions_and_expressions ใครบางคนสามารถกำหนดสิ่ง lambdas สิ่งสั้น ๆ และให้ที่มันจะมีประโยชน์?

3
มีประโยชน์ด้านประสิทธิภาพการใช้ไวยากรณ์อ้างอิงวิธีแทนไวยากรณ์แลมบ์ดาใน Java 8 หรือไม่
วิธีการอ้างอิงข้ามค่าใช้จ่ายของเสื้อคลุมแลมบ์ดา? พวกเขาอาจจะในอนาคตหรือไม่ อ้างอิงจากการสอนของ Java เกี่ยวกับวิธีการอ้างอิง : บางครั้ง ... การแสดงออกแลมบ์ดาไม่ทำอะไรเลยนอกจากเรียกวิธีการที่มีอยู่ ในกรณีเหล่านั้นมักจะชัดเจนกว่าในการอ้างอิงถึงวิธีการที่มีอยู่ตามชื่อ การอ้างอิงวิธีใช้ทำให้คุณสามารถทำได้ มันเป็นแลมบ์ดาขนาดกะทัดรัดและอ่านง่ายสำหรับวิธีการที่มีชื่ออยู่แล้ว ฉันชอบไวยากรณ์แลมบ์ดากับไวยากรณ์การอ้างอิงเมธอดด้วยเหตุผลหลายประการ: แลมบ์ดานั้นชัดเจนขึ้น แม้จะมีการอ้างสิทธิ์ของออราเคิล แต่ฉันพบว่าแลมบ์ดาไวยากรณ์นั้นง่ายต่อการอ่านมากกว่าการอ้างอิงวิธีการออบเจ็กต์สั้น ๆ เพราะไวยากรณ์การอ้างอิงเมธอดนั้นไม่ชัดเจน: Bar::foo คุณกำลังเรียกวิธีการหนึ่งอาร์กิวเมนต์คงที่ในชั้นเรียนของ x และผ่านมันได้หรือไม่ x -> Bar.foo(x) หรือคุณกำลังเรียกวิธีการเป็นศูนย์อาร์กิวเมนต์บน x? x -> x.foo() ไวยากรณ์การอ้างอิงเมธอดสามารถยืนอยู่ได้ทั้งอันใดอันหนึ่ง มันซ่อนสิ่งที่รหัสของคุณกำลังทำอยู่ แลมบ์ดาปลอดภัยกว่า หากคุณอ้างอิง Bar :: foo เป็นวิธีการเรียนและ Bar ภายหลังเพิ่มวิธีการตัวอย่างที่มีชื่อเดียวกัน (หรือในทางกลับกัน) รหัสของคุณจะไม่รวบรวมอีกต่อไป คุณสามารถใช้ lambdas อย่างสม่ำเสมอ คุณสามารถห่อฟังก์ชั่นใด ๆ ในแลมบ์ดา - เพื่อให้คุณสามารถใช้ไวยากรณ์เดียวกันได้ทุกที่ …

6
อะไรคือความแตกต่างระหว่างฟังก์ชั่นและแลมบ์ดา?
ฉันสับสนเล็กน้อยเกี่ยวกับ 'ฟังก์ชั่น' และ 'แลมบ์ดา' ฉันเคยเห็นตัวอย่างบางส่วนที่แสดงว่าคำหลักแบบแผนlambdaทำงานคล้ายกับคำหลัก JavaScript functionแต่ฉันไม่รู้ว่าเกี่ยวข้องกันอย่างไร ฉันบอกว่า 'function' และ 'method' สามารถใช้แทนกันได้เมื่อพูดถึงวัตถุใน. net ฉันสงสัยว่า 'แลมบ์ดา' และ 'ฟังก์ชั่น' ในทำนองเดียวกันหมายถึงสิ่งเดียวกัน ฉันสงสัยว่า 'แลมบ์ดา' มีความหมายลึกลับบางอย่างหรือไม่เนื่องจากเห็นว่าตัวอักษรกรีกแลมบ์ดา (λ) ปรากฏในอวตารมากมายในไซต์นี้ ในการทำให้สิ่งต่าง ๆ สับสนมากขึ้นใน. net ส่วนการทำงานของ C # หมายถึงนิพจน์ฟังก์ชันที่ส่งผ่านไปยังฟังก์ชันอื่นเป็น 'แลมบ์ดานิพจน์' ดังนั้นคำนี้ดูเหมือนจะอยู่ทั่วทุกแห่ง ฉันยังคุ้นเคยกับคำว่า 'lambda แคลคูลัส' ด้วย อะไรคือความแตกต่างระหว่างฟังก์ชั่นและแลมบ์ดา?

6
ใช้แลมบ์ดานิพจน์เมื่อใดก็ตามที่เป็นไปได้ในการฝึกหัด Java
ฉันเพิ่งเข้าใจแลมบ์ดานิพจน์ที่นำมาใช้ในจาวา 8 ฉันพบว่าเมื่อใดก็ตามที่ฉันใช้อินเตอร์เฟซที่ใช้งานได้ฉันมักจะใช้นิพจน์แลมบ์ดาแทนการสร้างคลาสที่ใช้อินเทอร์เฟซ นี่ถือว่าเป็นการปฏิบัติที่ดีหรือไม่? หรือสถานการณ์ของพวกเขาที่ใช้แลมบ์ดาสำหรับอินเทอร์เฟซการใช้งานไม่เหมาะสมหรือไม่
52 java  lambda 

5
ทำไมไพ ธ อนไม่อนุญาตให้แกะหลายสาย?
บางคนสามารถอธิบายเหตุผลที่เป็นรูปธรรมได้ว่าทำไม BDFL จึงเลือกที่จะสร้าง Python lambdas บรรทัดเดียว? ดีจัง: lambda x: x**x ซึ่งส่งผลให้เกิดข้อผิดพลาด: lambda x: x**x ฉันเข้าใจว่าการสร้างแลมบ์ดาหลายบรรทัดจะ "รบกวน" กฎการเยื้องตามปกติและจะต้องเพิ่มข้อยกเว้นเพิ่มเติม แต่นั่นไม่คุ้มกับผลประโยชน์หรือไม่ ดูจาวาสคริปต์เช่น เราจะอยู่ได้อย่างไรถ้าไม่มีฟังก์ชั่นที่ไม่ระบุชื่อ พวกมันขาดไม่ได้ Pythonistas ไม่ต้องการกำจัดการตั้งชื่อฟังก์ชั่นหลายบรรทัดทุกบรรทัดเพื่อส่งผ่านการโต้แย้งใช่ไหม
50 lambda  python 

3
ต้นกำเนิดและความหมายของวลี“ แลมบ์ดาที่สุดคืออะไร”
ฉันยุ่งกับภาษาการเขียนโปรแกรมที่ใช้งานได้ไม่กี่ปีที่ผ่านมาและฉันก็พบกับวลีนี้ ตัวอย่างเช่นมันเป็นบทของ "The Little Schemer ซึ่งแน่นอนว่าบล็อกนี้มีมาก่อนชื่อนี้ (ไม่บทไม่ได้ช่วยตอบคำถามของฉัน) ฉันเข้าใจความหมายของแลมบ์ดาความคิดของฟังก์ชั่นนิรนามนั้นเรียบง่ายและทรงพลัง แต่ฉันไม่เข้าใจว่า "ที่สุด" หมายถึงอะไรในบริบทนี้ สถานที่ที่ฉันได้เห็นวลีนี้: ชื่อของบทที่ 8 ของ The Little Schemer บล็อก: http://lambda-the-ultimate.org/ ชุดเอกสาร "แลมบ์ดาสุดยอด X": http://library.readscheme.org/page1.html ฉันรู้สึกว่าฉันไม่มีข้อมูลอ้างอิงที่นี่ใครช่วยได้บ้าง

10
การใช้งาน LINQ และ Lambda Expressions นำไปสู่รหัสที่อ่านได้น้อยลงหรือไม่ [ปิด]
ฉันกำลังพูดคุยกับเพื่อนร่วมงานใน Linq ฉันจะคัดลอกที่นี่: ผู้ร่วมงาน: ขอซื่อสัตย์ที่นี่ ไวยากรณ์ Linq แย่มาก มันสับสนและไม่ง่าย ฉัน: โอ้มาเลยสับสนมากกว่า T-SQL เหรอ? เพื่อนร่วมงาน: เอ่อใช่ ฉัน: มันมีส่วนพื้นฐานเดียวกันเลือกสถานที่และจาก ผู้ร่วมงาน: Linq สำหรับฉันคือการกำจัดไอเท็มเชิงสัมพันธ์ + OO ผู้ร่วมงาน: อย่าเข้าใจฉันผิด - มันมีประสิทธิภาพอย่างไม่น่าเชื่อ แต่พวกเขาเรียกคืน SQL เพื่อใช้การเก็บรวบรวมวัตถุ agains ฉันเห็นว่าการใช้ Linq + Lamda นั้นทรงพลังมาก (เขาเห็นด้วย) และทำให้อ่านรหัสได้ง่ายขึ้น (เขาไม่เห็นด้วยกับจุดนั้น): pickFiles = from f in pickFolder.GetFiles("*.txt") where ValidAuditFileName.IsMatch(f.Name) select f; หรือ var …

5
แลมบ์ดาแสดงออกถึงสิ่งที่มากกว่าคลาสภายในที่ไม่ระบุชื่อด้วยวิธีการเดียวหรือไม่?
มี hype ใหม่พร้อมกับการแสดงออกแลมบ์ดาที่รอคอยมานานใน Java 8; ทุกๆ 3 วันบทความอื่นจะปรากฏพร้อมกับพวกเขาเกี่ยวกับวิธีเจ๋ง ๆ เท่าที่ฉันเข้าใจแลมบ์ดานิพจน์แล้วมันไม่มีอะไรมากไปกว่าคลาสภายในที่ไม่ระบุชื่อด้วยวิธีการเดียว (อย่างน้อยก็ในระดับรหัสไบต์) นอกจากนี้มันยังมาพร้อมกับฟีเจอร์ที่ดีอีกอย่าง - การอนุมานแบบ แต่ฉันเชื่อว่าสิ่งนี้เทียบเท่าได้กับยาชื่อสามัญในบางระดับ เมื่อรู้อย่างนี้แล้วการแสดงออกของแลมบ์ดาจะนำสิ่งที่มากกว่าแค่การสร้างประโยคในภาษาจาวา ฉันสามารถสร้างคลาสที่ทรงพลังและยืดหยุ่นมากขึ้นหรือโครงสร้างเชิงวัตถุอื่น ๆ ด้วยการแสดงออกแลมบ์ดาที่ไม่สามารถสร้างขึ้นด้วยคุณสมบัติภาษาปัจจุบันได้หรือไม่

3
เหตุใดฉันจึงควรใช้“ การทำงานตามหน้าที่” แทนการวนซ้ำ
for (Canvas canvas : list) { } NetBeans แนะนำให้ฉันใช้ "การทำงานตามหน้าที่": list.stream().forEach((canvas) -> { }); แต่นี่คือเหตุผลที่แนะนำ ? ถ้ามีอะไรมันยากที่จะอ่านและเข้าใจ คุณโทรstream()แล้วใช้การแสดงออกแลมบ์ดากับพารามิเตอร์forEach() canvasฉันไม่เห็นว่าเป็นอย่างไรดีกว่าforลูปในตัวอย่างแรก เห็นได้ชัดว่าฉันกำลังพูดถึงสุนทรียภาพเท่านั้น อาจมีข้อได้เปรียบทางเทคนิคที่นี่ที่ฉันหายไป มันคืออะไร? เหตุใดฉันจึงควรใช้วิธีที่สองแทน

1
การอนุมานประเภทใน Java 8
การแนะนำสัญกรณ์แลมบ์ดาใหม่ (ดูตัวอย่างเช่นบทความนี้ ) ใน Java 8 จะต้องใช้การอนุมานบางประเภทหรือไม่? ถ้าเป็นเช่นนั้นระบบประเภทใหม่จะส่งผลกระทบต่อภาษาจาวาโดยรวมอย่างไร

3
อะไรคือข้อดีและข้อเสียในแนวทางของ C #, Java และ Scala to Closures / Lambdas / …?
ฉันสงสัยว่าสิ่งที่แตกต่างระหว่างดำเนินการทางเทคนิค C # และสกาล่าและวิธีการแก้ปัญหาทั้งเปรียบเทียบกับความคิดของการดำเนินงานและความกังวลเปล่งออกมาในอีเมลPeek อดีตแลมบ์ดาโดยไบรอันเก๊ส่งไปยังรายการทางไปรษณีย์ของโครงการแลมบ์ดา (JSR 335) ? จากอีเมล: เราสำรวจถนนของ "บางที lambdas ควรจะเป็นอินสแตนซ์ของคลาสภายในซึ่งจะง่ายมาก" แต่ในที่สุดก็มาถึงตำแหน่งของ "ฟังก์ชั่นเป็นทิศทางที่ดีกว่าสำหรับอนาคตของภาษา" และต่อไป: มุมมอง lambdas-are-objects ของโลกขัดแย้งกับอนาคตที่เป็นไปได้นี้ มุมมอง lambdas-are-function ของโลกไม่ได้และการรักษาความยืดหยุ่นนี้เป็นหนึ่งในจุดที่สนับสนุน lambdas ที่ไม่ทำให้เกิดภาระด้วยแม้แต่ลักษณะที่ปรากฏของวัตถุ สรุป: Lambdas-are-function เปิดประตู Lambdas-are-objects ปิดพวกเขา เราต้องการเห็นประตูที่เปิดทิ้งไว้ และความคิดเห็นบางส่วนจากบุคคลในเธรด Redditพูดว่า: จริง ๆ แล้วฉันส่งอีเมลถึง Neal Gafter เกี่ยวกับเรื่องนี้และความเข้าใจที่ จำกัด ของฉันเกี่ยวกับการอธิบายของเขา C # และการออกแบบ Java ในปัจจุบันค่อนข้างคล้ายกับที่ผู้ได้รับมอบหมายเป็นวัตถุจริงและไม่ใช่ประเภทการทำงาน ดูเหมือนว่าเขาเชื่อว่า Java ควรเรียนรู้จากข้อเสียของแกะแกะ C # …
30 c#  java  scala  lambda  closures 

11
สามารถใช้ฟังก์ชั่นแลมบ์ดา \ ในซอฟต์แวร์ทางธุรกิจได้หรือไม่?
ฉันสังเกตเห็นโพสต์ที่นี่ซึ่งแสดงให้เห็นถึงการใช้ฟังก์ชั่นของผู้ได้รับมอบหมาย \ lambda เพื่อแก้ไขช่องโหว่ในความคิดตรงกลางโดยไม่มีการซ้ำซ้อนจำนวนมาก: http://www.markhneedham.com/blog/2009/04/04/functional-c -The หลุม-in-the-กลางรูปแบบ / ปัญหาน่าจะเป็นที่นักพัฒนารุ่นน้องและคนอื่น ๆ ไม่จำเป็นต้องเข้าใจว่าแนวคิดฟังก์ชั่นตัวชี้ \ มอบหมาย \ lambda คืออะไรซึ่งดูเหมือนว่าจะทำให้การอ่าน (และอาจแก้จุดบกพร่อง) รหัสยากขึ้น เราควรหลีกเลี่ยงหรือ จำกัด การใช้เครื่องมือนี้อย่างรุนแรงในการเขียนซอฟต์แวร์ธุรกิจโดยเฉพาะในทีมงานขนาดเล็กหรือร้านค้าผู้พัฒนาเพียงผู้เดียวหรือไม่? หรือเป็นที่ยอมรับที่จะใช้กับความคิดเห็นที่เหมาะสมและคาดหวังว่าเมื่อฉันไม่อยู่ต่อที่นักพัฒนาต่อไปจะเข้าใจหรือเรียนรู้เกี่ยวกับฟังก์ชั่นแลมบ์ดา?
26 lambda 

1
ทำไม Haskell จึงไม่มีแลมบ์ดาระดับนามธรรม?
มีเหตุผลทางทฤษฎีบ้างไหม (เช่นว่าการตรวจสอบชนิดหรือการอนุมานประเภทจะไม่สามารถตัดสินใจได้) หรือเหตุผลเชิงปฏิบัติ (ยากเกินกว่าที่จะใช้อย่างถูกต้อง) ปัจจุบันเราสามารถห่อสิ่งต่างๆให้เป็นnewtypeเช่นนั้นได้ newtype Pair a = Pair (a, a) แล้วมี Pair :: * -> * λ(a:*). (a,a)แต่เราไม่สามารถทำสิ่งที่ชอบ (มีบางภาษาที่มีพวกเขาตัวอย่างเช่นScala ทำ )

5
อะไรคือλx.λf.fx (เช่น reverse Apply) ใน lambda แคลคูลัส? ฟังก์ชั่นที่เกี่ยวข้องมีชื่อมาตรฐานในการเขียนโปรแกรมหรือไม่?
λx.λf.fxในแคลคูลัสแลมบ์ดาคืออะไร? ฟังก์ชั่นที่เกี่ยวข้องมีชื่อมาตรฐานในภาษาโปรแกรมการใช้งานเช่น Haskell หรือไม่? ในการเขียนโปรแกรมเชิงวัตถุมีชื่อปกติสำหรับวิธีการfooที่ใช้ฟังก์ชั่นเป็นอาร์กิวเมนต์เช่นนั้นx.foo(f)จะส่งกลับf(x)?

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