ลูกหลานชาวฝรั่งเศสและอังกฤษของ ML ดั้งเดิมได้เลือกทางเลือกที่แตกต่างกันและทางเลือกของพวกเขาได้รับการสืบทอดมาหลายทศวรรษจนถึงรูปแบบที่ทันสมัย ดังนั้นนี่เป็นเพียงมรดก แต่ส่งผลต่อสำนวนในภาษาเหล่านี้
ฟังก์ชันจะไม่เรียกซ้ำตามค่าเริ่มต้นในกลุ่มภาษาฝรั่งเศส CAML (รวมถึง OCaml) ตัวเลือกนี้ทำให้ง่ายต่อการใช้คำจำกัดความของฟังก์ชัน (และตัวแปร) โดยใช้letในภาษาเหล่านั้นมากเนื่องจากคุณสามารถอ้างถึงคำจำกัดความก่อนหน้าภายในเนื้อหาของคำจำกัดความใหม่ F # สืบทอดไวยากรณ์นี้จาก OCaml
ตัวอย่างเช่นการใช้ฟังก์ชัน superceding pเมื่อคำนวณเอนโทรปีของ Shannon ของลำดับใน OCaml:
let shannon fold p =
let p x = p x *. log(p x) /. log 2.0 in
let p t x = t +. p x in
-. fold p 0.0
สังเกตว่าอาร์กิวเมนต์pของshannonฟังก์ชันลำดับที่สูงกว่าจะถูกแทนที่ด้วยอีกรายการหนึ่งpในบรรทัดแรกของเนื้อหาอย่างไรpในบรรทัดที่สองของเนื้อหาอย่างไร
ในทางกลับกันสาขา SML ของอังกฤษของกลุ่มภาษา ML ได้ใช้ตัวเลือกอื่นและfunฟังก์ชัน -bound ของ SML จะเรียกซ้ำตามค่าเริ่มต้น เมื่อนิยามฟังก์ชันส่วนใหญ่ไม่จำเป็นต้องเข้าถึงการเชื่อมโยงก่อนหน้าของชื่อฟังก์ชันผลลัพธ์นี้จะทำให้โค้ดง่ายขึ้น แต่ฟังก์ชั่นแทนที่จะทำเพื่อให้ใช้ชื่อที่แตกต่างกัน ( f1, f2ฯลฯ ) ซึ่งเป็นมลพิษขอบเขตและทำให้มันเป็นไปได้ที่จะเผลอเรียกผิด "รุ่น" ของฟังก์ชั่น และตอนนี้จะมีความแตกต่างระหว่างปริยาย-recursive funฟังก์ชั่น -bound และไม่ใช่ recursive valฟังก์ชั่น -bound
Haskell ทำให้สามารถอนุมานการอ้างอิงระหว่างคำจำกัดความได้โดย จำกัด ให้บริสุทธิ์ ทำให้ตัวอย่างของเล่นดูเรียบง่ายขึ้น แต่มีราคาแพงกว่าที่อื่น
สังเกตว่าคำตอบที่พระพิฆเนศและเอ็ดดี้ให้ไว้คือปลาชนิดหนึ่งสีแดง พวกเขาอธิบายว่าเหตุใดกลุ่มของฟังก์ชันจึงไม่สามารถวางไว้ในยักษ์ได้let rec ... and ...เนื่องจากมีผลต่อเมื่อตัวแปรประเภทได้รับการทำให้เป็นแบบทั่วไป สิ่งนี้ไม่เกี่ยวข้องกับrecการเป็นค่าเริ่มต้นใน SML แต่ไม่ใช่ OCaml