Trong khi xử lý sự cố một bài tập lớn hơn cho trường học, tôi đã tìm thấy một sai lầm mà tôi đã thực hiện, nơi tôi đang xử lý một danh sách mục đơn (một ngăn xếp với một mục) như thể nó là một mục duy nhất. Tôi đã giải quyết được vấn đề của mình, tuy nhiên trong thử nghiệm tiếp theo, tôi nhận thấy có điều gì đó lạ:Prolog: single item vs single item
48 ?- 1 is [1].
true.
49 ?- -1 is [-1].
ERROR: is/2: Type error: `character' expected, found `-1'
50 ?- 0.66 is [0.66].
ERROR: is/2: Type error: `character' expected, found `0.66'
Hành vi tương tự xảy ra khi sử dụng =: =/2 thay vì là/2. Vì vậy, vì lý do gì đó, một danh sách mục đơn lẻ được coi là giống như một mục duy nhất, nhưng chỉ cho các số nguyên không âm.
Tò mò hơn bất cứ điều gì khác ... bất kỳ ai biết tại sao điều này là?
Cảm ơn!
Cảm ơn! Điều đó dường như là câu trả lời, vì "97 là [a]." là đúng. Tuy nhiên, có lẽ tôi là một thằng ngốc, nhưng tôi thực sự không thể hiểu chính xác những gì đang được mô tả trên trang hướng dẫn đó. Các biến vị ngữ được liệt kê (min, max, abs, vv) dường như không tồn tại đối với tôi, và tôi không hiểu tại sao tất cả các đối số có dấu + ở phía trước. Và tôi không hiểu tại sao vị từ liên quan đến Q này chỉ là một dấu chấm với hai đối số, tôi không sử dụng bất cứ thứ gì như thế. – The111
Trang đó giới thiệu về SWI-Prolog; có lẽ việc triển khai của bạn không hỗ trợ min, max, v.v ...? Một số đối số được bắt đầu bằng '+' vì điều này cho biết chế độ, tức là, '+' có nghĩa là bị ràng buộc (và không phải biến). Cuối cùng, cú pháp danh sách '[a, b]' là viết tắt của thuộc tính hàm tạo danh sách './2' (vì vậy thực sự là'. (A,. (B, [])) '). Trong trường hợp của bạn, một danh sách một số nguyên như '[1]' là viết tắt của '. (1, [])'. – sharky
Ok, giải thích tuyệt vời ... Tôi nghĩ rằng tôi đã nhận nó ngay bây giờ. Cảm ơn một lần nữa. – The111