ฉันกำลังใช้คำนำเพื่อพยายามไขปริศนาคาคุโระ ฉันมีรายการกฎลักษณะนี้ โดยที่ R และ C เป็นตัวแทนของแถวและจุดเริ่มต้นของแต่ละกล่อง L แทนความยาว และ S คือผลรวมของตัวเลขในแถว
% across(R, C, L, S)
across(2,4,2,4).
across(2,10,2,4).
across(3,4,4,12).
across(3,10,2,6).
across(4,3,2,6).
เท่าที่ฉันสามารถบอกได้ ในการไขปริศนาโดยใช้ข้อจำกัด สำหรับแต่ละองค์ประกอบ L ฉันจะต้องค้นหาตัวเลขที่แตกต่างกันระหว่าง 1 ถึง 9 ซึ่งเมื่อรวมกันแล้วจะเท่ากับ S ฉันกำลังดิ้นรนมากที่จะหาคำตอบนี้ รหัสที่ฉันมีจนถึงตอนนี้คือ:
solveAcross(Solution) :-
findall([R,C,L,S], across(R,C,L,S), List),
Solution = length(List, L),
Solution ins 1..9,
all_distinct(Solution),
labeling([], Solution).
แต่ทั้งหมดนี้กลับเป็นเท็จ
ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม
Solution = length(List, L)
และSolution = 1..9
หมายถึงอะไร - person lurker   schedule 07.04.2016Solution = length(List, L)
และSolution = 1..9
ซึ่งทั้งสองเกิดขึ้นในโปรแกรมของคุณ แน่นอนว่า การเชื่อมนี้เพียงอย่างเดียวจะล้มเหลวอยู่แล้ว เนื่องจาก1..9
และlength(List, L)
ไม่รวมกันเป็นหนึ่งเดียว - person mat   schedule 07.04.2016Solution = length(List, L)
รวมคำศัพท์length(List, L)
เข้ากับตัวแปรSolution
ในคำนำ คุณไม่ได้กำหนดผลลัพธ์ของภาคแสดงโดยใช้=
เช่นเดียวกับที่คุณทำในภาษาอื่นๆ หากคุณต้องการให้รายการมีความยาวL
และชื่อของรายการเป็นSolution
คุณก็แค่ทำlength(Solution, L)
หากคุณต้องการให้Solution
มีความยาวเท่ากับList
คุณต้องทำlength(List, Len), length(Solution, Len)
- person lurker   schedule 07.04.2016