Tôi đã tự hỏi liệu có tồn tại một công cụ có thể vẽ cây tìm kiếm từng bước của một chương trình Prolog không? Cảm ơn.Có chương trình nào có thể vẽ cây tìm kiếm các truy vấn Prolog không?
Trả lời
Nếu hệ thống Prolog của bạn có trình gỡ lỗi có thể tùy chỉnh, bạn có thể dễ dàng viết mã thu thập đồ thị thời gian chạy của riêng bạn. Giả sử Hệ thống Prolog của bạn có một móc gọi lại là goal_tracing/2 như trong Jekejeke Prolog. Sau đó, chúng ta có thể tiếp tục và kiểm tra khung hiện tại và khung phụ huynh để tạo liên kết trong biểu đồ. Đây là mã số:
goal_tracing(call, F) :-
frame_property(F, sys_call_indicator(N, A)),
frame_property(F, sys_parent_frame(G)),
frame_property(G, sys_call_indicator(M, B)),
!,
update_link(N/A, M/B).
goal_tracing(_, _).
:- dynamic link/2.
update_link(A, B) :-
link(A, B),
!.
update_link(A, B) :-
assertz(link(A, B)).
Có thể thấy chúng tôi chỉ kiểm tra cổng cuộc gọi và chỉ xem xét chỉ báo biến vị ngữ . Nhưng các cách tiếp cận khác cũng có thể thu thập được nhiều dữ liệu hơn. Bây giờ chúng ta cần một số tiện ích để hiển thị kết quả. Chỉ có reset để được gọi trước khi bộ sưu tập, và một chương trình được gọi sau khi bộ sưu tập:
reset :-
retract(link(_, _)), fail.
reset.
show :-
write('http://yuml.me/diagram/scruffy/class/'),
link(A, B),
write(([B] -> [A])),
write(', '),
fail.
show.
Chúng tôi sản xuất một liên kết mà được hiểu bởi yuml.me. Cho phép thử với chương trình giai thừa đậu phộng. Mã chương trình trông như sau:
add(n, X, X).
add(s(X), Y, Z) :-
add(X, s(Y), Z).
mul(n, _, n).
mul(s(X), Y, Z) :-
mul(X, Y, H),
add(Y, H, Z).
fac(n, s(n)).
fac(s(X), Y) :-
fac(X, H),
mul(s(X), H, Y).
Chúng tôi có thể chạy các nhà sưu tập như sau:
?- reset.
?- trace.
?- fac(s(s(n)),X).
X = s(s(n))
?- nodebug.
?- show.
http://yuml.me/diagram/scruffy/class/[fac/2] -> [fac/2], [fac/2] -> [mul/3], [mul/3] -> [mul/3], [mul/3] -> [add/3], [add/3] -> [add/3], Yes
Một sau đó có thể dán URL vào trình duyệt và sẽ xem sơ đồ. Xóa ", Có" ở cuối URL. Dưới đây là kết quả:
Trân trọng
Cây tìm kiếm Prolog thường chỉ đơn giản là quá lớn để được kiểm tra từng bước, nhưng vẽ một cái có thể khá đơn giản và thú vị nữa. Có lẽ tôi sẽ cố gắng viết một bằng cách sử dụng thư viện html_write. Trong trường hợp đó, tôi sẽ báo cáo kết quả.
Trong khi chờ đợi, SWI-Prolog có một đại diện khá đặc biệt trong trình gỡ lỗi của nó. Có những chi tiết thú vị về cây chương trình Prolog. Nó không phải là dễ sử dụng và tôi phải thú nhận tôi vẫn chưa đọc tài liệu. Tuy nhiên tôi đã sử dụng trình gỡ lỗi thường xuyên. Bạn có thể điều hướng cây và các biến được tạo ra trên các nút khác nhau. Đó là mạnh mẽ.
Trực quan hóa không gian tìm kiếm Prolog là một nhiệm vụ thú vị không đơn giản!
chỉnh sửa Tôi quên đề cập đến rằng XPCE có khả năng hiển thị các cây lớn. Nếu bạn đã có cây chứng minh, hiển thị nó sẽ rất dễ dàng. Chỉ cần mở trình xem. Nên có một số ví dụ trong trợ giúp thủ công XPCE. Bạn có thể căn cứ hiển thị trên đó.
@Robert Oschler: cảm ơn rất nhiều để sửa bài xấu bày tỏ của tôi. Nó rất thú vị, mặc dù, tôi sợ hãi, tôi sẽ tiếp tục thể hiện rất kém. Nhưng tôi đánh giá cao. – CapelliC
Niềm vui của tôi, đặc biệt là vì thông tin chứa đựng là quan trọng. Ngoài ra, xin chào từ một fan hâm mộ Prolog đồng nghiệp! –
- 1. Thực hiện tìm kiếm Prolog
- 2. Chương trình nào có thể giúp vỏ REPL nhớ và lịch sử tìm kiếm?
- 3. Làm cách nào tôi có thể buộc tìm kiếm theo chương trình trong UISearchBar?
- 4. Làm cách nào tôi có thể thực hiện tìm kiếm theo chương trình mà không cần sử dụng API?
- 5. Có chương trình nào có thể giúp hiểu chương trình khác không?
- 6. Ack: Tìm kiếm cây thư mục cho các tệp có đuôi cụ thể
- 7. Làm cách nào tôi có thể thực hiện tìm kiếm mờ bằng django-haystack và chương trình phụ trợ elasticsearch?
- 8. Tôi có thể tìm kiếm các kết quả quy trình được lưu trữ không?
- 9. Prolog "hoặc" nhà điều hành, truy vấn
- 10. Twitter: Truy vấn tìm kiếm thẻ băm
- 11. Truy vấn tìm kiếm C# với linq
- 12. kiểm tra xem cây có phải là cây tìm kiếm nhị phân không
- 13. truy vấn plugin tìm kiếm grails
- 14. Mô tả ngôn ngữ Prolog có thể tìm kiếm trực tuyến
- 15. Vùng lân cận gần nhất Tìm kiếm bằng Python mà không có cây k-d
- 16. Truy vấn tìm kiếm mysql PHP
- 17. Gỡ rối các truy vấn tìm kiếm Solr trên Sunspot
- 18. SpringData: có thể có các truy vấn con trong chú thích truy vấn không?
- 19. Elastic Truy vấn Tìm kiếm - Cụm từ với không gian
- 20. Nhiều truy vấn tìm kiếm thẻ
- 21. Làm thế nào để tìm nạp theo chương trình các bài viết phù hợp với truy vấn tìm kiếm trong WordPress?
- 22. Có thể tìm kiếm JIRA để biết danh sách các mục phụ có cha mẹ được tìm thấy trong một truy vấn khác không?
- 23. Trạng thái nào được lưu giữa các truy vấn tìm kiếm lại trong Linqpad?
- 24. Sourceforge.net có API tìm kiếm không?
- 25. các chương trình của tôi có thể truy cập nhiều hơn 4GB bộ nhớ không?
- 26. javax.persistence.NoResultException: Không tìm thấy thực thể nào cho truy vấn
- 27. Chuyển đổi PDF có thể tìm kiếm sang PDF không thể tìm kiếm được
- 28. Cây tìm kiếm nhị phân đệ quy
- 29. Có thể sử dụng Querydsl không có các loại truy vấn được tạo không?
- 30. Có thể thực hiện truy vấn SQL đệ quy không?
Bạn thật tuyệt vời. Tôi không có ý kiến. –
Có lẽ một trong những câu trả lời hay nhất mà tôi từng đọc trên SO. Cảm ơn @ j4n bur53. – Will
Ngày một chút, mục tiêu frame_property/2 cần nâng cấp. –