อะไรคือλx.λf.fx (เช่น reverse Apply) ใน lambda แคลคูลัส? ฟังก์ชั่นที่เกี่ยวข้องมีชื่อมาตรฐานในการเขียนโปรแกรมหรือไม่?


15

λx.λf.fxในแคลคูลัสแลมบ์ดาคืออะไร?

ฟังก์ชั่นที่เกี่ยวข้องมีชื่อมาตรฐานในภาษาโปรแกรมการใช้งานเช่น Haskell หรือไม่?

ในการเขียนโปรแกรมเชิงวัตถุมีชื่อปกติสำหรับวิธีการfooที่ใช้ฟังก์ชั่นเป็นอาร์กิวเมนต์เช่นนั้นx.foo(f)จะส่งกลับf(x)?


3
คุณต้องซื้อพจนานุกรม
Robert Harvey

13
อันไหน? ที่ไหน? เท่าไหร่
Alexey

4
ฉันไม่เข้าใจ downvotes ดูเหมือนเป็นคำถามที่สมเหตุสมผลอย่างสมบูรณ์แบบสำหรับฉัน
Giorgio

ฉันโพสต์คำตอบด้านล่าง แต่ฉันรู้ว่า OP ได้ถามว่านิพจน์แลมบ์ดานี้คืออะไรดังนั้นฉันจึงลบ = D
Jason

แนวคิดที่คุณอ้างถึงเป็นที่รู้จักกันในชื่อ combinator มีการอ่านที่นี่ถ้าคุณไม่คุ้นเคยen.wikipedia.org/wiki/SKI_combinator_calculusแม้ว่าฉันจะไม่คุ้นเคยกับ combinator ที่รู้จักในลักษณะที่คุณอ้างถึงแม้ว่า C จาก BCKW ใกล้เคียง (พลิกแล้ว) แต่ไม่ใช่ en.wikipedia.org/wiki/B,C,K,W_system ที่เหมือนกันทำไมไม่สนุกและสร้าง Combinators เหล่านั้นที่ส่งผลต่อการทำงานของคุณ :)
Jimmy Hoffa

คำตอบ:


9

ใน Haskell, \x.\f.f xเป็นflip ($)ซึ่งเป็น$จะอ่านเป็นใช้ผมจะอ่านย้อนกลับใช้

ขึ้นอยู่กับ/programming/4090168/is-there-an-inverse-of-the-haskell-operator


ผิด ... ฟลิปต์ฟ\f.\x.\y.f y xลิปต์คือ C ที่นี่en.wikipedia.org/wiki/B,C,K,W_system
Jimmy Hoffa

นอกจากนี้การเพิ่ม$ในการพลิกเช่นนี้คาดว่าจะมีฟังก์ชั่นการใช้งานบางส่วนที่ใช้เวลามากกว่า 2 ข้อโต้แย้งที่คุณจะพลิกเพียง 2 ครั้งล่าสุดเพื่อให้คุณใช้บางส่วนทั้งหมด แต่ 2
Jimmy Hoffa

6
ดังนั้นคุณสงสัยว่า(\f.\x.\y.f y x) (\f.\x.f x)จะลดการ(\x.\f.f x)เปลี่ยนชื่อโมดูโล? ซึ่งมันทำ
Dan D.

5

โดยใช้มาตรฐานcombinatorsคุณสามารถแสดงฟังก์ชั่นนี้เป็น

C I

ที่ไหน

C f x y = (f y) x

ใน Haskell มันจะเป็น

flip id

ที่นี่id's ชนิดเป็นผู้เชี่ยวชาญการ(a -> b) -> a -> bและflipแลกเปลี่ยนและa -> ba

คุณสามารถแสดงมันในแคลคูลัส SKI :

S (K (S I)) K

+1 สำหรับการลด combinators สำหรับสิ่งนี้ ผมไม่สงสัยว่ามันเป็นสิ่งที่เป็นที่รู้จักกันมาก แต่ถ้าในขณะที่เขาระบุว่ามันเป็นสิ่งที่เกี่ยวข้องกับคริสตจักรเลขผมโน้มเอียงที่จะสงสัยว่า CI เป็นเอกสารได้ทุกที่มีความเกี่ยวข้องในการศึกษาเลขทุกคนคริสตจักร
จิมมี่ฮอฟฟา

5

ในต้นฉบับโบสถ์อลองโซ "The นิ่วแลมบ์ดาแปลง" เขาหมายถึง Combinator นี้โดยT

ในบริบทของเลขคริสตจักรก็จะเรียกว่าประสบการณ์ สิ่งนี้ตรงกับเครื่องหมาย "ชวเลข" ที่ใช้โดยคริสตจักรสำหรับ "แอปพลิเคชัน" ของคำศัพท์NกับคำM : "[ M N ]" หมายถึง "( NM )"

ฉันยังไม่ได้ยินชื่อมาตรฐานสำหรับฟังก์ชั่นอะนาล็อกในการเขียนโปรแกรม


3

นี้บางครั้งเรียกว่าCombinator ดงและใน Clojure ก็เรียกว่าแมโครด้ายแรก ใช้หลักมันอยู่ในที่ช่วยให้คุณสามารถแสดงคำนวณเช่นเดียวกับชุดของการคำนวณที่ถูกล่ามโซ่เพื่อที่พวกเขาดำเนินการในได้. ยกตัวอย่างเช่นการใช้ค่าxผ่านมันไปยังฟังก์ชันfแล้วผ่านผลของการf(x)ที่จะฟังก์ชั่นgจะได้รับการเขียนเป็นg(f(x))ใช้องค์ประกอบของฟังก์ชั่นมาตรฐาน (หรือg (f x)ถ้าคุณกำลังทำงานกับวงเล็บโดยปริยาย) สิ่งนี้อาจไม่สะดวกเมื่อมีฟังก์ชั่นล่ามโซ่จำนวนมากเพราะคุณต้องอ่านพวกเขาในลำดับย้อนหลังว่าพวกมันทำงานอย่างไร ตัวประสานดงช่วยให้คุณแสดงความแตกต่างนี้ได้ถ้าเรากำหนดตัวประสานดงเป็น:

T x f = f x
T x f g ... = T (T x f) g ...

จากนั้นการแสดงออกจะกลายเป็นT x f g hh (g (f x))

(สำหรับผู้ที่มองหาข้อมูลเพิ่มเติมรวมถึงการใช้งานที่เป็นรูปธรรมในภาษาแร็กเก็ตฉันมีบล็อกโพสต์ในหัวข้อ: Thrush Combinator ในแร็กเก็ต )


2

ฉันหวังว่าฉันเข้าใจคำถามของคุณถูกต้อง แต่ฉันเชื่อว่านี่เป็นที่รู้จักกันในชื่อ (ย้อนกลับ) ผู้ดำเนินการไพพ์ในภาษา ML

[1; 2; 3] |> List.map sq // let it = [1; 4; 9]

นอกจากนี้ยังมีผู้ประกอบการท่อย้อนกลับซึ่งช่วยในการสั่งซื้อของการดำเนินงาน

printf "The value is.." <| 2 + 3 // let it = "The value is..5"

สิ่งนี้มีประโยชน์เพราะรูปแบบที่ไม่มีคำแนะนำ

printf "The value is.." 2 + 3 ;; error

จะมีข้อผิดพลาดเพราะ printf จะพยายามประเมิน"The value is.." 2และข้อผิดพลาดเพราะไม่มี+ตัวดำเนินการที่กำหนดไว้ ในการทำให้มันใช้งานได้ให้ใช้วงเล็บ:

printf "The value is.." (2 + 3) // let it = "The value is..5"

สำหรับการใช้งานจริงผู้ปฏิบัติงาน|>มีประโยชน์อย่างเหลือเชื่อและเป็นขนมปังและเนยของภาษาที่เป็นแรงบันดาลใจ ML และ ML เช่น F #, LiveScript และ Elixir <|เป็นเรื่องธรรมดาน้อยกว่าและมักใช้เมื่อมันเพิ่มความสามารถในการอ่านเท่านั้น

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