Saya menggunakan prolog untuk mencoba memecahkan teka-teki kakuro. Saya memiliki daftar aturan seperti ini, di mana R dan C mewakili baris dan titik awal setiap kotak, L mewakili panjang dan S adalah jumlah angka pada baris tersebut,
% 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).
Sejauh yang saya tahu, untuk memecahkan teka-teki menggunakan batasan, untuk setiap elemen L, saya harus mencari angka berbeda antara 1 dan 9 yang jika dijumlahkan sama dengan S. Saya benar-benar kesulitan untuk menyelesaikannya, kode yang saya miliki sejauh ini adalah ini:
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).
Tapi yang dilakukan hanyalah mengembalikan false.
Bantuan apa pun akan dihargai.
Solution = length(List, L)
danSolution = 1..9
? - person lurker   schedule 07.04.2016Solution = length(List, L)
danSolution = 1..9
, yang keduanya terjadi dalam program Anda. Tentu saja, konjungsi ini saja sudah gagal, karena1..9
danlength(List, L)
tidak menyatu. - person mat   schedule 07.04.2016Solution = length(List, L)
menyatukan sukulength(List, L)
dengan variabelSolution
. Di prolog, Anda tidak menetapkan hasil predikat menggunakan=
seperti yang Anda lakukan dalam bahasa lain. Jika Anda ingin daftar panjangnyaL
dan nama daftarnyaSolution
, maka lakukan saja,length(Solution, L)
. Jika Anda inginSolution
memiliki panjang yang sama denganList
, lakukanlah,length(List, Len), length(Solution, Len)
. - person lurker   schedule 07.04.2016