2012-12-19 4 views
6

어떻게 표준 입력을 버퍼링하지 않고 파싱합니까? 올바르게 이해하면 phrase/2에 목록이 필요하고 phrase_from_file/2에서 library(pure_input)까지 파일이 필요합니다. 표준 입력에서 파싱하기

나는 일반 조건 (안 DCG)를 사용하고 get_char/2read_line_to_codes/2 같은 내장 기능을 사용하여 내 문제를 해결하지만, 마지막에 구현 내가

그리고 만약 C.

로 작성했을 솔루션에 대한 의심과 유사 SWI-Prolog의 표준 입력은 무엇입니까? read_line_to_codes ( library(readutil))에는 입력 스트림이 필요합니다 (예 : get/1과는 다른). 나는 다음과 같은 술어로 얻는다 :

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

. . . 물론 작동하지만 약간 해킹 된 것으로 느껴집니다. 하나 이상의 입력 스트림을 열 수 있습니까? 어떤 것이 운영체제의 표준 입력인지 어떻게 알 수 있습니까 (필자의 경우 Linux)?

답변

2

당신은 스트림의 적절한 이름을 찾고 있다고 생각합니다. 다음은 샘플 유용 할 수있는 : 내가 발견

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

가장 자세한 설명 페이지는 here입니다.

+0

나는이 페이지를주의 깊게 충분히 읽었다 고 생각했다 ... 이것은 내 표준 입력 질문에 실제로 대답한다. 표준 입력을 구문 분석하기 위해 DCG를 사용할 수 있는지 여부는 아직 알 수 없습니다. –

+1

예,'repeat, read_line_to_codes (user_input, L), phrase (your_grammar, L) '과 같은 루프를 사용하십시오. – CapelliC

관련 문제