Xin chào, tôi đang cố gắng chèn phần tử vào danh sách nhưng rất quan trọng từ chương trình của tôi là kết quả được lưu trữ trong danh sách gốc chứ không phải trong danh sách mới.
Bất kỳ mã nào tôi đã viết hoặc tìm thấy trên internet chỉ thành công nếu bạn tạo danh sách mới trong đó kết quả cuối cùng được giữ lại.
Vì vậy, câu hỏi của tôi là bất cứ ai có thể cho tôi biết làm thế nào để xác định một chức năng: chèn (X, L) trong đó X là một phần tử và L là một danh sách?chèn phần tử vào danh sách và trả về cùng một danh sách được cập nhật
Trả lời
Không, Prolog không hoạt động theo cách đó. Không có thứ như "sửa đổi" một giá trị. Một biến có thể được thống nhất với một giá trị cụ thể, nhưng nếu nó đã là [1,3]
, nó sẽ không bao giờ là [1,2,3]
sau đó.
Khi người dạy aschepler nói, bạn không thể thêm hoặc thực hiện bất kỳ thay đổi nào đối với danh sách thích hợp, tức là danh sách trong đó mọi phần tử đã bị ràng buộc. Chỉ có "sửa đổi" chúng ta có thể làm là thống nhất một biểu thức với một biểu thức khác.
Tuy nhiên, có một khái niệm về danh sách một phần mà các thành phần bổ sung có thể được "thêm" ở cuối. Điều này thường được gọi là danh sách khác biệt, mặc dù danh pháp đó có thể không dễ hiểu ngay lập tức.
Giả sử chúng ta bắt đầu, không phải với một danh sách trống, nhưng với một biến miễn phí X. Tuy nhiên, người ta có thể nghĩ rằng trừ X từ X và nhận được "không có gì". Đó là, một danh sách trống khác biệt được đại diện bởi X - X. Dấu trừ "-" ở đây là một toán tử thuần túy chính thức; không đánh giá sự khác biệt được dự định. Nó chỉ là một cú pháp thuận tiện như bạn thấy từ cách danh sách khác biệt có thể được sử dụng để thực hiện những gì bạn (có thể) muốn làm.
Chúng ta có thể thêm một yếu tố vào một danh sách khác biệt như sau:
insertDL(M,X-Y,X-Z) :- Y = [M|Z].
đây M là yếu tố mới, chúng tôi muốn thêm vào, XY là "cũ" danh sách khác biệt, và XZ là "mới" sự khác biệt (mà M đã được thêm vào, bằng cách hợp nhất biến Y miễn phí trước đó với danh sách một phần [M | Z], sao cho Z trở thành đuôi "mở" của danh sách một phần X).
Khi cuối cùng chúng tôi đã thực hiện chèn mọi thứ vào danh sách khác biệt, chúng tôi có thể biến X thành danh sách thích hợp bằng cách đặt "đuôi miễn phí" tại điểm đó thành danh sách trống []. Theo nghĩa này X là biến "giống nhau" như khi chúng ta lần đầu tiên bắt đầu, chỉ cần thống nhất bằng các bước gia tăng từ biến tự do đến danh sách thích hợp.
Đây là một kỹ thuật rất mạnh mẽ trong lập trình Prolog, và phải mất một số thực hành để cảm thấy thoải mái khi sử dụng nó. Một số liên kết để thảo luận thêm trên Web:
[Từ danh sách Prolog chênh lệch danh sách]
http://www.irisa.fr/prive/ridoux/ICLP91/node8.html
[Thực hiện sự khác biệt danh trong Prolog]
http://www.cl.cam.ac.uk/~jpw48/difflists.pdf
[Bài giảng Ghi chú: Danh sách Difference]
http://www.cs.cmu.edu/~fp/courses/lp/lectures/11-diff.pdf
Một số phần mở đầu cung cấp thuộc tính setarg/3 để sửa đổi các cụm từ trong địa điểm.
Để sử dụng nó trên danh sách, bạn chỉ cần phải xem xét rằng họ chỉ là một đại diện tốt đẹp của chuỗi từ ngữ hợp với functor '.'/2
Trong mọi trường hợp, khi bạn cần phải sử dụng setarg/3 trong Prolog, nó có thể có nghĩa là bạn đang làm điều gì sai.
- 1. Cách chèn phần tử vào danh sách cuối cùng?
- 2. OCaml chèn một phần tử vào danh sách
- 3. Cập nhật MongoDB (Chèn danh sách mục vào một mảng)
- 4. Cách chèn phần tử vào danh sách nội bộ MongoDB?
- 5. Chèn một Danh sách vào Danh sách khác trong Redis
- 6. Python: Regex findall trả về một danh sách, tại sao cố truy cập phần tử danh sách [0] trả về lỗi?
- 7. Tổng số danh sách các danh sách; trả về danh sách tổng hợp
- 8. Tạo danh sách có thể đọc được bằng "và" được chèn vào trước phần tử cuối cùng từ danh sách ruby
- 9. Trả về một phần tử từ một Danh sách trong Scala
- 10. Đọc danh sách Python - truy cập phần tử được tạo cuối cùng?
- 11. Danh sách chuyển đổi vào bản đồ của phần tử -> danh sách (phần tử) trong scala
- 12. Điền vào các khoảng trống trong phần tử danh sách
- 13. Python: Đối với mỗi phần tử danh sách áp dụng một hàm trên danh sách
- 14. Python: cách nối thêm các phần tử mới vào danh sách danh sách?
- 15. Thay đổi một phần tử trong một danh sách sẽ thay đổi nhiều danh sách ..?
- 16. Chuyển đổi Danh sách vào một danh sách Pivot
- 17. Tạo một danh sách từ một danh sách khác chuyển mỗi phần tử trên Groovy
- 18. Danh sách chuyển đổi danh sách và đệ quy
- 19. Wicket Ajax cập nhật một danh sách xuống
- 20. Python: Thay thế một phần tử trong danh sách các danh sách (# 2)
- 21. Xóa phần tử khỏi danh sách chung
- 22. ElementTree findall() trả về danh sách trống
- 23. Thử nghiệm phần tử trong danh sách
- 24. Merge và cập nhật hai danh sách trong C#
- 25. Danh sách trả về AsyncTask hoạt động
- 26. Làm thế nào để truy cập vào một phần của một danh sách trong Jinja2
- 27. chắp thêm danh sách vào danh sách
- 28. Automapper Danh sách copy vào danh sách
- 29. Thêm các phần tử vào danh sách từ điển
- 30. C# 5.0 async đang chờ trả về một danh sách
Nếu bạn cần cập nhật danh sách tại chỗ, thì bạn đang cố suy nghĩ quá mức. Bạn có thể mô tả vấn đề bạn đang cố giải quyết chi tiết hơn không? – Juliet