2012-03-08 2 views
1

업데이트되지 않을 것 같습니다이 프로그램으로 인해 :줄 바꿈 상태는 내가 GNU CLISP을 사용하고 미친 얻고있다

(read-line) 
(format t "~&<prompt RESPONSE") 

출력 뭔가 같은 :

my input... 
<prompt RESPONSE 

을하지만 인쇄하는 경우

(format t "~&prompt> ") 
(read-line) 
(format t "~&<prompt RESPONSE") 

예 : 나는 가짜 빈 줄을 얻을 (읽기 라인) 전에 프롬프트

prompt> my input... 

<prompt RESPONSE 

필자는 read-line 전후에 (finish-output) 사용을 시도했지만 도움이되지 않았습니다. 나는 그 빈 줄이 어디에서 왔는지 이해하지 못한다. CLISP에 버그가있는 것 같습니다.

+0

Linux Mint (Debian 파생물)에서 문제점을 재현 할 수 없습니다. Windows에서 CLISP를 사용하고 있습니까? –

+0

부탁드립니다. 나는 비슷한 질문을 입력하는 것을 의미했습니다 ... 특히 조건부 개행이 사용자 입력을 인식하도록 만드는 방법이 있는지 물어 보았습니다. 왜냐하면 다른 시나리오에서도이 것을 만들 수 있기 때문입니다 ... – lindes

+0

@lindes 상상할 수 있습니다. 사용자의 입력이 줄 바꿈으로 끝나는 지, 즉 한 번에 하나의 키 스트로크를 수락하는 상황에서 미리 알 수없는 시나리오. REPL은 그렇게 작동하지 않습니다. 한 번에 한 줄의 사용자 입력을 받아들이고 항상 줄 바꿈으로 끝납니다. 부가 메모 : REPL에서 한 번에 두 개 이상의 표현식을 입력하면 (즉, 한 줄에 모두 입력) 출력이 섞여 버리므로 그렇게하지 않는 것이 좋습니다. –

답변

2

모르는 사람들은 format 명령의 조건부 개행은 "필요하다면 개행을 인쇄하십시오"라는 의미입니다. 즉, 마지막으로 isp가 인쇄 된 줄 바꿈이 이미 개행이 아닌 경우에만 줄 바꿈을 인쇄합니다.

개행을 할 것인지 여부를 결정할 때 사용자 입력을 무시합니다 (최소한 컴퓨터에서!). 이는 모든 시스템에서 해당되지 않을 수 있습니다. 나는 정말로 기억이 안 나네.

바로 앞에 <prompt RESPONSE~&에 초점을 맞추어 보겠습니다. 첫 번째 경우에 format은 아직 아무것도 인쇄하지 않았으므로 줄 바꿈을 인쇄 할 필요가 없다고 봅니다. 두 번째 경우에서 format은 인쇄 된 마지막 것이 개행이 아니므로 개행을 인쇄해야한다고 봅니다.

해결 방법 : 사용자가 항상 줄 바꿈을 제공한다는 것을 알고 있으므로 format 문에 포함하지 마십시오. 당신이 원하는 경우에 당신은 당신의 초기 프롬프트에서 제거 할 수 있습니다 : "그럼 어쨌든에 대한 ~& 것입니다"

(format t "prompt> ") 
(read-line) 
(format t "<prompt RESPONSE") 

그래서, 다음 문제가 발생, 그리고 실제로, 다른 용도가 있습니다. 예를 들어, 두 연속 출력을 분리하려면 다음을 입력하십시오.

(format t "prompt> ") 
(read-line) 
(format t "<prompt RESPONSE 1~&<prompt RESPONSE 2") 
+0

내가 남긴 질문은 입력 내용을 인식 할 수 있는지 여부입니다. 그럴 수있어? 그렇다면 어떻게? – lindes

+0

입력으로 무엇을하고 싶습니까? 변수에 저장 하시겠습니까? –

+0

@lindes 방금 전에 들었던 다른 의견을 읽었습니다. –