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

13
เขียนล่ามสำหรับแคลคูลัสแลมบ์ดาที่ยังไม่พิมพ์
ความท้าทายคือการเขียนล่ามสำหรับแคลคูลัสแลมบ์ดาที่ไม่ได้พิมพ์ไว้ในตัวละครให้น้อยที่สุด เรากำหนดแคลคูลัสแลมบ์ดาที่ไม่ได้พิมพ์ดังนี้: วากยสัมพันธ์ นิพจน์มีสามประเภทดังต่อไปนี้: การแสดงออกแลมบ์ดามีรูปแบบ(λ x. e)ที่xอาจเป็นชื่อตัวแปรทางกฎหมายและeการแสดงออกทางกฎหมายใด ๆ นี่xเรียกว่าพารามิเตอร์และeเรียกว่าร่างกายของฟังก์ชั่น เพื่อความง่ายเราได้เพิ่มข้อ จำกัด เพิ่มเติมว่าจะต้องไม่มีตัวแปรที่มีชื่อเดียวกันกับxขอบเขตในปัจจุบัน ตัวแปรเริ่มต้นที่จะอยู่ในขอบเขตเมื่อชื่อของมันปรากฏขึ้นระหว่าง(λและและหยุดที่จะอยู่ในขอบเขตที่สอดคล้องกัน.) แอปพลิเคชั่นมีรูปแบบ(f a)ที่ไหนfและaเป็นนิพจน์ทางกฎหมาย ที่นี่fเรียกว่าฟังก์ชั่นและaเรียกว่าอาร์กิวเมนต์ ตัวแปรมีรูปแบบxที่xเป็นชื่อตัวแปรทางกฎหมาย อรรถศาสตร์ ฟังก์ชั่นถูกนำไปใช้โดยการแทนที่แต่ละพารามิเตอร์ที่เกิดขึ้นในร่างกายฟังก์ชั่นด้วยการโต้แย้ง อีกอย่างเป็นทางการการแสดงออกในรูปแบบ((λ x. e) a)ที่xเป็นชื่อตัวแปรและeและaมีการแสดงออกประเมิน (หรือลด) เพื่อการแสดงออกe'ที่e'เป็นผลมาจากการเปลี่ยนที่เกิดขึ้นแต่ละแห่งxในด้วยea รูปแบบปกติคือการแสดงออกซึ่งไม่สามารถประเมินเพิ่มเติม ความท้าทาย ภารกิจของคุณหากคุณเลือกที่จะยอมรับมันคือการเขียนล่ามซึ่งใช้เป็นนิพจน์ของแคลคูลัสแลมบ์ดาที่ไม่มีการพิมพ์ที่ไม่มีตัวแปรอิสระและสร้างผลลัพธ์ตามรูปแบบปกติของนิพจน์ . หากการแสดงออกไม่มีรูปแบบปกติหรือไม่ใช่การแสดงออกที่ถูกต้องพฤติกรรมที่ไม่ได้กำหนด โซลูชันที่มีจำนวนอักขระน้อยที่สุดชนะ หมายเหตุสองประการ: อินพุตอาจถูกอ่านจาก stdin หรือจากชื่อไฟล์ที่กำหนดเป็นอาร์กิวเมนต์บรรทัดคำสั่ง (คุณจะต้องใช้อย่างใดอย่างหนึ่งหรืออื่น ๆ - ไม่ใช่ทั้งสองอย่าง) เอาต์พุตไปที่ stdout อีกทางหนึ่งคุณอาจกำหนดฟังก์ชั่นที่รับอินพุตเป็นสตริงและส่งคืนเอาต์พุตเป็นสตริง หากอักขระที่ไม่ใช่ ASCII เป็นปัญหาสำหรับคุณคุณสามารถใช้เครื่องหมายแบ็กสแลช ( \) แทนλ เรานับจำนวนอักขระไม่ใช่ไบต์ดังนั้นแม้ว่าไฟล์ต้นฉบับของคุณจะถูกเข้ารหัสเป็น Unicode …

22
การแทนที่สตริงแบบเรียกซ้ำ
งาน เขียนโปรแกรมหรือฟังก์ชั่นที่ได้รับสามสายA, B, Cสร้างสายออกที่แต่ละอินสแตนซ์ของBในAได้ถูกแทนที่ด้วยCซ้ำ การแทนที่แบบเรียกซ้ำหมายถึงการทำซ้ำการแทนที่โดยในแต่ละขั้นตอนอินสแตนซ์ที่ไม่ซ้ำซ้อนทั้งหมดของBในA(เลือกอย่างตะกละตะกลามจากซ้ายไปขวา) จะถูกแทนที่ด้วยCจนกว่าBจะไม่มีอยู่ในAนั้นอีก Input / Output คุณสามารถใช้ใด ๆ ของ วิธีการเริ่มต้นสำหรับ I / O สตริงจะมีอักขระ ASCII ที่พิมพ์ได้เท่านั้น (และอาจมี ใด ๆ ก็ได้ ) Bจะไม่เป็นสตริงว่างเปล่าในขณะที่AและCอาจเป็น สตริงจะถือว่าเป็นธรรมดาคุณไม่สามารถยกตัวอย่างเช่นถือว่าBเป็นรูปแบบ Regex ชุดค่าผสมบางอย่างจะไม่สิ้นสุด โปรแกรมของคุณสามารถทำอะไรก็ได้ในกรณีเหล่านั้น กรณีทดสอบ สิ่งเหล่านี้อยู่ในรูปแบบ: A/B/C\nOutput Hello, world!/world!/PPCG Hello, PPCG Uppercase is up/up/down Uppercase is down ababababa/aba/ccc cccbcccba delete/e/{empty string} dlt {empty string}/no/effect {empty …
25 code-golf  string  substitution  code-golf  math  code-golf  string  set-theory  code-golf  code-golf  compile-time  code-golf  kolmogorov-complexity  binary  code-golf  sequence  cops-and-robbers  code-golf  subsequence  card-games  code-golf  sequence  primes  code-golf  code-golf  number  graphical-output  music  code-golf  ascii-art  code-golf  string  lambda-calculus  code-golf  string  code-generation  code-golf  unicode  code-golf  math  combinatorics  code-golf  balanced-string  code-golf  sequence  cops-and-robbers  code-golf  sequence  cops-and-robbers  code-challenge  fastest-code  chess  code-golf  math  graphical-output  code-golf  string  hello-world  animation  code-golf  number  arithmetic  code-golf  integer  code-golf  code-golf  combinatorics  code-golf  kolmogorov-complexity  graphical-output  code-golf  string  code-golf  code-golf  game  code-golf  math  combinatorics  code-golf  ascii-art  popularity-contest  random  code-golf  arithmetic  number-theory  integer  code-golf  tips  underload  code-golf  math  sequence  primes  code-golf  math  path-finding  code-golf  ascii-art  primes  code-golf  kolmogorov-complexity  alphabet 

4
การเพิ่มประสิทธิภาพคอมไพเลอร์ SKI
SKI แคลคูลัสเป็นตัวแปรของแคลคูลัสแลมบ์ดาที่ไม่ได้ใช้การแสดงออกแลมบ์ดา ใช้เฉพาะแอปพลิเคชันและ combinators S , Kและฉันเท่านั้น ในความท้าทายนี้งานของคุณคือการแปลแง่สกีเข้าแง่แลมบ์ดาในรูปแบบปกติβ ข้อกำหนดการป้อนข้อมูล อินพุตเป็นคำ SKI ในการแสดงข้อความต่อไปนี้ คุณอาจเลือกที่จะรับบรรทัดใหม่ที่เป็นตัวเลือก การป้อนข้อมูลที่ประกอบด้วยตัวอักษรS, K, I, (และ)และตอบสนองไวยากรณ์ต่อไปนี้ (ในรูปแบบ ABNF) กับstermการเป็นสัญลักษณ์เริ่มต้น: sterm = sterm combinator ; application sterm = combinator ; sterm = '(' sterm ')' ; grouping combinator = 'S' | 'K' | 'I' ; primitives สเปคเอาท์พุท เอาต์พุตเป็นคำแลมบ์ดาที่ไม่มีตัวแปรอิสระในการแสดงข้อความต่อไปนี้ คุณอาจเลือกที่จะแสดงบรรทัดใหม่ที่เป็นตัวเลือก ผลลัพธ์จะต้องเป็นไปตามหลักไวยากรณ์ต่อไปนี้ในรูปแบบ …

1
แปลงλ-expressions เป็น SK-expressions
λแคลคูลัสหรือแลมบ์ดาแคลคูลัสเป็นระบบตรรกะขึ้นอยู่กับฟังก์ชั่นที่ไม่ระบุชื่อ ตัวอย่างเช่นนี่เป็นนิพจน์:: λf.(λx.xx)(λx.f(xx)) อย่างไรก็ตามสำหรับจุดประสงค์ของการท้าทายนี้เราจะทำให้สัญลักษณ์ง่ายขึ้น: เปลี่ยนλเป็น\(เพื่อให้พิมพ์ง่ายขึ้น):\f.(\x.xx)(\x.f(xx)) .ในส่วนหัวของแลมบ์ดาไม่จำเป็นเพื่อให้เราสามารถวาง:\f(\xxx)(\xf(xx)) ใช้Unlambdaสไตล์คำนำหน้าโน้ตด้วย`สำหรับการประยุกต์ใช้มากกว่าการเขียนทั้งสองฟังก์ชั่นด้วยกัน (สำหรับคำอธิบายเต็มรูปแบบของวิธีการทำเช่นนี้ดูแปลงระหว่างแลมบ์ดาแคลคูลัสสัญลักษณ์ ):\f`\x`xx\x`f`xx นี่เป็นการทดแทนที่ซับซ้อนที่สุด แทนที่ตัวแปรแต่ละตัวด้วยตัวเลขในวงเล็บตามความลึกของตัวแปรที่สัมพันธ์กับส่วนหัวแลมบ์ดาที่เป็นของมัน (เช่นใช้การทำดัชนี De Bruijn ที่ใช้ 0 ) ตัวอย่างเช่นใน\xx(ฟังก์ชั่นเอกลักษณ์), xในร่างกายจะถูกแทนที่ด้วย[0]เพราะมันเป็นของส่วนหัว (ตามพื้นฐาน 0) พบเมื่อสำรวจภายในการแสดงออกจากตัวแปรไปยังจุดสิ้นสุด; จะถูกแปลงเป็น\x\y``\x`xxxy ตอนนี้เราสามารถวางตัวแปรในส่วนหัวออก\x\y``\x`[0][0][1][0]\\``\`[0][0][1][0] ตรรกะเชิงผสมนั้นเป็นทัวริงทาร์พิทที่ทำจากcalcul-แคลคูลัส (จริง ๆ แล้วมันมาก่อน แต่มันไม่เกี่ยวข้องเลย) "Combinatory ตรรกศาสตร์สามารถถูกมองว่าเป็นตัวแปรของแลมบ์ดาแคลคูลัสซึ่งแลมบ์ดานิพจน์ (แทนการทำหน้าที่เป็นนามธรรม) จะถูกแทนที่ด้วยชุด จำกัด combinators ฟังก์ชั่นดั้งเดิมที่ไม่มีขอบเขต จำกัด ตัวแปร" 1 ตรรกะที่พบได้บ่อยที่สุดคือแคลคูลัสของSK combinatorซึ่งใช้หลักการพื้นฐานต่อไปนี้: K = λx.λy.x S = λx.λy.λz.xz(yz) บางครั้ง Combinator I …

8
ย้อนกลับเรียงแทรก
วัตถุประสงค์ สร้างรายการที่มีสัญญาณรบกวนเดิมจากการเคลื่อนไหวที่มีการจัดเรียงการแทรกเพื่อจัดเรียง รายการต้นฉบับจะมีตัวเลขทั้งหมดตั้งแต่0ถึงN-1(รวม) โดยที่Nขนาดของอินพุต อินพุต รายการที่มีการเคลื่อนไหวที่จำเป็นเพื่อเรียงลำดับรายการ แต่ละค่าแสดงถึงจำนวนช่องที่แทนที่ด้วยหมายเลขเดิม (สัญญาณรบกวน) ที่จะอยู่ในตำแหน่งที่ถูกต้องโปรดทราบว่ากระบวนการนี้มาจากด้านซ้ายไปทางขวา ค่าที่ตำแหน่ง (ดัชนี 0) iในรายการอินพุตจะอยู่ระหว่าง0และiรวม คุณไม่จำเป็นต้องจัดการอินพุตที่ไม่ถูกต้องพฤติกรรมใด ๆ เป็นที่ยอมรับในกรณีนี้ (เกิดความผิดพลาดวนซ้ำไม่สิ้นสุด ฯลฯ ) เอาท์พุต รายการที่มีสัญญาณรบกวน ทีละขั้นตอนในการสร้างการเคลื่อนไหว Scrambled List | Moves to sort [4,0,2,1,3,5] | [0, , , , , ] #4 stay in place [4,0,2,1,3,5] | [0,1, , , , ] #0 is moved …
19 code-golf  array-manipulation  code-golf  code-golf  animation  code-golf  restricted-source  code-golf  java  code-golf  decision-problem  graph-theory  code-golf  conversion  electrical-engineering  code-golf  ascii-art  code-golf  string  substitution  code-golf  math  code-golf  string  set-theory  code-golf  code-golf  compile-time  code-golf  kolmogorov-complexity  binary  code-golf  sequence  cops-and-robbers  code-golf  subsequence  card-games  code-golf  sequence  primes  code-golf  code-golf  number  graphical-output  music  code-golf  ascii-art  code-golf  string  lambda-calculus  code-golf  string  code-generation  code-golf  unicode  code-golf  math  combinatorics  code-golf  balanced-string  code-golf  sequence  cops-and-robbers  code-golf  sequence  cops-and-robbers  code-challenge  fastest-code  chess  code-golf  math  graphical-output  code-golf  string  hello-world  animation  code-golf  number  arithmetic  code-golf  integer  code-golf  code-golf  combinatorics  code-golf  kolmogorov-complexity  graphical-output  code-golf  string  code-golf  code-golf  game  code-golf  math  combinatorics  code-golf  ascii-art  popularity-contest  random  code-golf  arithmetic  number-theory  integer  code-golf  tips  underload  code-golf  math  sequence  primes  code-golf  math  path-finding  code-golf  ascii-art  primes  code-golf  kolmogorov-complexity  alphabet 

4
เห็นภาพตัวเลขของคริสตจักร
พื้นหลัง การแสดงเงื่อนไข calcul-แคลคูลัส lambda-juggler ที่มีชื่อเสียง (และนักกอล์ฟโค้ด ) John Tromp คิดค้นภาพที่น่าสนใจของคำศัพท์ในλ-แคลคูลัส ในคำพูดของเขา: abstractions (lambdas) แสดงด้วยเส้นแนวนอนตัวแปรตามเส้นแนวตั้งเล็ดลอดออกมาจาก lambda ที่มีผลผูกพันและแอปพลิเคชันโดยลิงก์แนวนอนที่เชื่อมต่อตัวแปรซ้ายสุด ตัวอย่างเช่นคำแลมบ์ดาλf.λx.f (f (f (f (fx)))) สอดคล้องกับการสร้างภาพ: ------------------- | | | | ------------------- | | | | | | | | |---- | | |---- | |---- |---- | อ่านจากบนลงล่าง: เส้นแนวนอนแรกแสดงถึง first เส้นแรก เส้นสี่เส้นที่ลงมาจากนั้นแทนค่าfในร่างกาย ในทำนองเดียวกันเส้นแนวนอนที่สองแสดงถึง …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.