การเขียนโปรแกรมโปรล็อกเริ่มต้น

ฉันกำลังพยายามเรียนอารัมภบท ฉันต้องการเขียนโค้ดใน prolog สำหรับรายการตัวเลขทั่วไป จนถึงตอนนี้ฉันมี pick_numbers_general(List, N, NumList) โดยที่ List เป็นรายการทั่วไป (รวมถึงรายการที่ซ้อนกัน) และ N เป็นตัวเลข

เพรดิเคตจะสำเร็จหาก NumList เป็นรายการตัวเลขใน List รวมถึงตัวเลขที่อยู่ในรายการที่ซ้อนกัน มากกว่า N ลำดับการปรากฏตัวของตัวเลขใน Numlist จะเหมือนกับลำดับใน L ดังนั้น ตัวอย่างเช่น pick_numbers_general([g,h,1,[2,[n,3]],p],1,NumList) จะเป็นจริงเมื่อ NumList เป็น [2,3]


person Gunther    schedule 16.02.2011    source แหล่งที่มา


คำตอบ (1)


คำแนะนำ: คุณกำลังดำเนินการสามครั้งพร้อมกัน หากคุณแยกสิ่งเหล่านั้นออก แบบฝึกหัดนี้จะง่ายขึ้นมาก

pick_numbers_general(List, Min, Numbers) :-
    flatten(List, Flat),
    filter_numbers(Flat, Numbers0),
    filter_greater_than(Numbers0, Min, Numbers).
person Fred Foo    schedule 16.02.2011