หากคุณมีฟังก์ชัน "test a b" ซึ่งคืนค่าเป็นจริงหาก a และ b เชื่อมต่อกันโดยตรง และหากคุณมีรายการสิ่งต่าง ๆ ที่ไม่เรียงลำดับ อะไรจะเป็นวิธีแก้ปัญหาที่หรูหราและรวดเร็วในการกรองสิ่งที่เชื่อมต่อทั้งหมดจากรายการที่กำหนด
ตัวอย่าง:
let test a b = let diff = a - b in diff == 0 ;;
let lst = [4;1;7;3;8;9;2;0] ;;
filter_connected 2 lst ;;
-> [4;1;3;2;0]
มีคำแนะนำอะไรบ้าง?
อืม ฉันจะพยายามปรับแต่งคำถามของฉัน...
- มีรายการสิ่งต่าง ๆ ที่ไม่ได้เรียงลำดับ pE "ให้ lst = [a;b;c;d;e;f;g;h];;" ด้วยรายการประเภท val a'
- นอกจากนี้ยังมีฟังก์ชั่นที่ตัดสินว่าสองสิ่งเชื่อมต่อกันโดยตรงหรืออีกนัยหนึ่งถ้าทั้งสองสิ่งเป็นเพื่อนบ้านโดยตรง: val test : a' -> a' -> bool
- สิ่งที่ฉันต้องการคือฟังก์ชันที่มีสามอาร์กิวเมนต์ อันแรกคือสิ่งที่เฉพาะเจาะจง อันที่สองคือรายการที่ไม่ได้เรียงลำดับของสิ่งต่าง ๆ ตามที่แนะนำข้างต้น อันสุดท้ายคือฟังก์ชันทดสอบที่อธิบายไว้ข้างต้น: val filter_connected : a' -> a ' รายการ -> (a' -> a' -> บูล) -> รายการ a'
ถ้า a ‹-> b เป็นเพื่อนบ้านโดยตรง และ b ‹-> c เป็นเพื่อนบ้านโดยตรง ดังนั้น [a;b;c] จะเชื่อมต่อกัน
"List.filter () lst" ที่แนะนำไม่ได้ช่วยในที่นี้ เนื่องจากจะกรองเฉพาะเพื่อนบ้านที่กำหนดเท่านั้น
ในตัวอย่างข้างต้น โดยให้ ‹-> b และ b ‹-> c เป็นเพื่อนบ้านโดยตรงในกรณีของฟังก์ชันทดสอบ และอื่นๆ ทั้งหมดที่ไม่ใช่ การเรียก "filter_connected" จะเป็น:
"filter_connected b lst (ทดสอบ);;"
และจะกลับมา: [a;b;c]
หวังว่าคงจะสะอาดกว่านี้นะ...
diff = 0
ที่คุณเขียนdiff == 0
หากเพียงเพราะพวกเขาทำสิ่งเดียวกันในการใช้งานปัจจุบัน แต่ขอย้ำอีกครั้งว่า ถ้าtest
เป็นตัวอย่างของสิ่งที่คุณหมายถึงโดยการเชื่อมต่อ ทำไมคุณไม่ส่งต่อมันไปที่filter_connected
และที่สำคัญกว่านั้น คำจำกัดความของความเชื่อมโยงนั้นไม่ใช่เพียงความเท่าเทียมกันเท่านั้น และจะใช้อย่างไรเพื่อให้ได้[4;1;3;2;0]
- person Pascal Cuoq   schedule 15.03.2010