λx.λf.fxในแคลคูลัสแลมบ์ดาคืออะไร?
ฟังก์ชั่นที่เกี่ยวข้องมีชื่อมาตรฐานในภาษาโปรแกรมการใช้งานเช่น Haskell หรือไม่?
ในการเขียนโปรแกรมเชิงวัตถุมีชื่อปกติสำหรับวิธีการfoo
ที่ใช้ฟังก์ชั่นเป็นอาร์กิวเมนต์เช่นนั้นx.foo(f)
จะส่งกลับf(x)
?
λx.λf.fxในแคลคูลัสแลมบ์ดาคืออะไร?
ฟังก์ชั่นที่เกี่ยวข้องมีชื่อมาตรฐานในภาษาโปรแกรมการใช้งานเช่น Haskell หรือไม่?
ในการเขียนโปรแกรมเชิงวัตถุมีชื่อปกติสำหรับวิธีการfoo
ที่ใช้ฟังก์ชั่นเป็นอาร์กิวเมนต์เช่นนั้นx.foo(f)
จะส่งกลับf(x)
?
คำตอบ:
ใน 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
$
ในการพลิกเช่นนี้คาดว่าจะมีฟังก์ชั่นการใช้งานบางส่วนที่ใช้เวลามากกว่า 2 ข้อโต้แย้งที่คุณจะพลิกเพียง 2 ครั้งล่าสุดเพื่อให้คุณใช้บางส่วนทั้งหมด แต่ 2
(\f.\x.\y.f y x) (\f.\x.f x)
จะลดการ(\x.\f.f x)
เปลี่ยนชื่อโมดูโล? ซึ่งมันทำ
โดยใช้มาตรฐานcombinatorsคุณสามารถแสดงฟังก์ชั่นนี้เป็น
C I
ที่ไหน
C f x y = (f y) x
ใน Haskell มันจะเป็น
flip id
ที่นี่id
's ชนิดเป็นผู้เชี่ยวชาญการ(a -> b) -> a -> b
และflip
แลกเปลี่ยนและa -> b
a
คุณสามารถแสดงมันในแคลคูลัส SKI :
S (K (S I)) K
ในต้นฉบับโบสถ์อลองโซ "The นิ่วแลมบ์ดาแปลง" เขาหมายถึง Combinator นี้โดยT
ในบริบทของเลขคริสตจักรก็จะเรียกว่าประสบการณ์ สิ่งนี้ตรงกับเครื่องหมาย "ชวเลข" ที่ใช้โดยคริสตจักรสำหรับ "แอปพลิเคชัน" ของคำศัพท์NกับคำM : "[ M N ]" หมายถึง "( NM )"
ฉันยังไม่ได้ยินชื่อมาตรฐานสำหรับฟังก์ชั่นอะนาล็อกในการเขียนโปรแกรม
นี้บางครั้งเรียกว่า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 h
h (g (f x))
(สำหรับผู้ที่มองหาข้อมูลเพิ่มเติมรวมถึงการใช้งานที่เป็นรูปธรรมในภาษาแร็กเก็ตฉันมีบล็อกโพสต์ในหัวข้อ: Thrush Combinator ในแร็กเก็ต )
ฉันหวังว่าฉันเข้าใจคำถามของคุณถูกต้อง แต่ฉันเชื่อว่านี่เป็นที่รู้จักกันในชื่อ (ย้อนกลับ) ผู้ดำเนินการไพพ์ในภาษา 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 <|
เป็นเรื่องธรรมดาน้อยกว่าและมักใช้เมื่อมันเพิ่มความสามารถในการอ่านเท่านั้น