2010-08-06 11 views
6

मैं निम्नलिखित कॉमन लिस्प कोड है:,प्रारूप वास्तव में आम लिस्प में कब प्रिंट करता है?

CL-USER> (micro-read-eval-print) 
(m-quote a) 
Micro > NIL 

ध्यान दें कि मैं में टाइप "(एम-बोली क)", जबकि:

(defun micro-read-eval-print() 
    (format t "Micro > ") 
    (let ((form (read-line))))) 

जब मैंने इसे चलाने के लिए, मैं निम्नलिखित मिल लिस्प दुभाषिया आउटपुट "माइक्रो> एनआईएल"।

अब, मुझे उम्मीद है कि इन घटनाओं को रिवर्स ऑर्डर में होने की उम्मीद होगी। प्रारूप की कथन पहले आने के बाद से मुझे पहले "माइक्रो>" मुद्रित होने की उम्मीद होगी। यह पहले मुद्रित क्यों नहीं है? और यह सुनिश्चित करने के लिए मुझे क्या करना है कि यह पहले मुद्रित है?

उत्तर

11

(defun micro-read-eval-print() 
    (format t "Micro > ") 
    (finish-output) 
    (let ((form (read-line))))) 

जोड़ने मेरा मानना ​​है कि आप मानक कब (stdio) जो, सी में, आमतौर पर उस भाषा में fflush() के माध्यम से पार हो जाने की प्रतिरोधक सामना कर रहे हैं की कोशिश।

finish-output सी मानक लाइब्रेरी के मानक लाइब्रेरी के fflush के समतुल्य प्रतीत होता है।

+4

सही, कार्यान्वयन buffered आईओ धाराओं का उपयोग कर सकते हैं और प्रारूप के बाद या पढ़ने से पहले आउटपुट को मजबूर करने की आवश्यकता नहीं है। तो पोर्टेबल कोड के लिए किसी को बल-आउटपुट या फिनिश-आउटपुट जैसे कुछ कॉल करना होगा। –

संबंधित मुद्दे