เหตุใดฟังก์ชันที่มีชื่อจึงต้องอยู่ในไฟล์แยกต่างหากในการกอด

ใน Haskell ใน 5 ขั้นตอน ฟังก์ชันแฟคทอเรียลถูกกำหนดไว้ดังนี้:

let fac n = if n == 0 then 1 else n * fac (n-1)

แต่สำหรับการกอด มันบอกว่า fac ต้องอยู่ใน fac.h ใครสามารถอธิบายได้ว่าทำไมถึงเป็นเช่นนี้ - การขาดความสามารถในการกำหนดฟังก์ชั่นที่มีชื่อดูเหมือนเป็นข้อ จำกัด มากมายสำหรับล่าม


person Casebash    schedule 30.03.2010    source แหล่งที่มา
comment
โปรดทราบว่า GHCI สามารถกำหนดฟังก์ชันได้ ฉันไม่เห็นเหตุผลมากนักที่จะใช้ Hugs ในปัจจุบัน   -  person Chuck    schedule 30.03.2010


คำตอบ (2)


คำตอบพื้นฐานเท่าที่ฉันสามารถบอกได้คือระดับบนสุดแบบโต้ตอบของ Hugs นั้นโดยพื้นฐานแล้วเป็นตัวแยกวิเคราะห์นิพจน์ และคำจำกัดความของฟังก์ชัน/ข้อมูลไม่ใช่นิพจน์ ตัวอย่างของคุณจะได้ผลจริงๆ ถ้าคุณสร้างนิพจน์และเขียน let fac n = if n == 0 then 1 else n * fac (n-1) in fac 19 การเพิ่มการสนับสนุนสำหรับสิ่งนี้จะเป็นความพยายามที่ยิ่งใหญ่ และเห็นได้ชัดว่าผู้ดำเนินการ Hugs คิดว่าเป็นการดีพอที่จะกำหนดให้คำจำกัดความของฟังก์ชัน/ข้อมูลอยู่ในไฟล์

person Chuck    schedule 30.03.2010

Hugs พลาดความสามารถในการกำหนดฟังก์ชันที่มีชื่อใดๆ (แบบเรียกซ้ำหรือไม่ก็ได้) นอกจากนี้ยังขาดความสามารถในการกำหนดประเภทข้อมูล

person sepp2k    schedule 30.03.2010
comment
สิ่งนี้บอกว่ามันมีข้อจำกัด ไม่ใช่เพราะเหตุใดจึงมีข้อจำกัดอยู่ - person ; 30.03.2010
comment
ขอขอบคุณสำหรับการชี้แจง แต่ฉันยังคงสงสัยว่าเหตุใดพวกเขาจึงตัดสินใจไม่นำเสนอคุณลักษณะนี้ - person Casebash; 30.03.2010