2012-12-19 44 views
6

Làm cách nào để phân tích đầu vào chuẩn (không có bộ đệm)? Nếu tôi hiểu chính xác, phrase/2 cần danh sách và phrase_from_file/2 từ library(pure_input) cần tệp.Phân tích cú pháp từ đầu vào tiêu chuẩn

tôi giải quyết vấn đề của tôi sử dụng các vị từ bình thường (không DCG) và sử dụng built-in như get_char/2read_line_to_codes/2, nhưng cuối cùng việc thực hiện vẻ nghi ngờ tương tự như giải pháp tôi sẽ viết bằng C.

Và nếu Tôi có thể lẻn một câu hỏi liên quan rất nhiều: đầu vào tiêu chuẩn trong SWI-Prolog là gì? read_line_to_codes (library(readutil)) cần có luồng đầu vào (không giống như get/1, ví dụ). Tôi nhận được nó với vị từ sau:

input_stream(Stream) :- 
    current_stream(Object, read, Stream), 
    integer(Object). 

. . . mà tất nhiên hoạt động, nhưng cảm thấy một chút bị tấn công. Có thể có nhiều luồng đầu vào mở không? Làm thế nào tôi sẽ biết cái nào là đầu vào tiêu chuẩn của hệ điều hành (Linux trong trường hợp của tôi)?

Trả lời

2

Tôi nghĩ bạn đang tìm kiếm cách đặt tên thích hợp của luồng. Dưới đây là một mẫu có thể hữu ích:

?- read_line_to_codes(user_input,L). 
|: a line 
L = [97, 32, 108, 105, 110, 101]. 

Trang giải thích chi tiết nhất mà tôi tìm thấy là here.

+0

Tôi nghĩ tôi đã đọc kỹ trang này ... Điều này trả lời câu hỏi đầu vào tiêu chuẩn của tôi. Vẫn không biết liệu tôi có thể sử dụng DCG để phân tích cú pháp đầu vào tiêu chuẩn hay không. –

+1

có, sử dụng một vòng lặp như 'lặp lại, read_line_to_codes (user_input, L), cụm từ (your_grammar, L) .' – CapelliC

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