2012-12-19 15 views
6

Standart girişi (arabelleğe alınmadan) nasıl ayrıştırırım? Doğru şekilde anlarsam, phrase/2 bir listeye ihtiyaç duyar ve library(pure_input)'dan phrase_from_file/2 bir dosyaya ihtiyaç duyar. Standart girişten ayrıştırma

Normal yüklemleri (değil DCG) kullanılarak ve get_char/2 ve read_line_to_codes/2 gibi inşa eklentileri kullanarak benim sorun çözüldü, ama sonunda uygulama ben

Ve eğer C

yazılmış olurdu çözüme şüpheyle benzer Çok ilgili bir soruya gizlice girebilirim: SWI-Prolog'da standart girdi nedir? read_line_to_codes ( library(readutil)) bir giriş akışına ihtiyaç duyar (örneğin, get/1'dan farklı olarak). Aşağıdaki yüklemeyle olsun:

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

. . . tabii ki çalışıyor, ama biraz hırpalanmış hissediyor. Birden fazla açık giriş akışına sahip olmak mümkün mü? İşletim sisteminin standart girdisini (Linux benim durumumda) hangisi olduğunu nasıl anlarım?

cevap

2

Sanırım akışların doğru adlarını arıyorsunuz. Aşağıda örnek bir yararlı olabileceğini: buldum

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

en detaylı açıklama sayfası here olduğunu.

+0

Bu sayfayı yeterince okumuştum sanıyordum ... Bu gerçekten standart giriş sorusu yanıtlıyor. Hala standart girişi ayrıştırmak için DCG kullanıp kullanamayacağımı bilmiyorum. –

+1

evet, yineleme, read_line_to_codes (user_input, L), ifade (your_grammar, L) gibi bir döngü kullanın. – CapelliC

İlgili konular