2009-12-03 56 views
5

Tôi mới dùng Prolog và tôi đã học được cách xác định vị từ trong một tệp và chạy trình thông dịch để sử dụng nó. Nhưng tôi muốn biết nếu có một cách để xác định vị từ tại dấu nhắc? Để tôi không phải chuyển đổi qua lại.Cách xác định vị từ trong prolog

cách tôi đang làm bây giờ là như

tập tin defs.pl này:

adjacent(1,2). 
adjacent(1,3). 

trong thông dịch prolog:

?- consult('defs.pl'). 
% defs.pl compiled 0.00 sec, 122 bytes 
true. 
?- adjacent(1,2). 
true. 

EDIT có lẽ tôi có nghĩa là làm thế nào để xác định 'sự thật' tôi không chắc chắn.

Trả lời

9

Bạn có thể sử dụng assert/1 ngữ:

?- assert(adjacent(1,4)). 
true 

EDIT: Bằng cách này, điều này sẽ không hoạt động nếu bạn cố gắng để kết hợp nó với các vị từ được định nghĩa trong một tập tin. Vì vậy, hãy xác định tất cả các biến vị ngữ liền kề/2 trong tệp của bạn, đều xác định tất cả chúng bằng khẳng định trong dòng lệnh.

Nếu bạn muốn xác định một số các vị từ trong các tập tin, và những người khác với khẳng định, sau đó tuyên bố trong tập tin của bạn mà vị rất linh hoạt:

% file contents 
:- dynamic(adjacent/2). 
adjacent(1,2). 
adjacent(1,3). 
4

Bạn có thể làm

?- consult(user). 

hoặc

?- [user]. 

và nhập các mệnh đề sau đó, sau đó chấm dứt đầu vào với phần cuối của tệp ch aracter (Ctrl-D trong Linux, có thể là Ctrl-Z trong MS-Windows). Điều này tương đương với việc đọc một tệp, xem the documentation of consult/1.

khẳng định/1 và rút lại/1 được dành cho các biến vị ngữ được mã động thay đổi (ví dụ: để lưu trữ dữ liệu chung), không dành cho lập trình thông thường.

+0

Tôi đồng ý rằng đó có thể là những gì chúng được thiết kế, nhưng tôi không thấy vấn đề khi sử dụng chúng (vì chúng có sẵn) để nhanh chóng kiểm tra và tìm hiểu prolog. Overhead không phải là một mối quan tâm. Trong khi tôi nghĩ giải pháp của bạn sạch hơn, nó cũng yêu cầu bạn phải nhập lại tất cả các biến vị ngữ bạn đã xác định khi bạn muốn thêm nhiều hơn nữa. – catchmeifyoutry

Các vấn đề liên quan