Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!usc!cs.utexas.edu!sun-barr!newstop!sun!quintus!dave From: dave@quintus.UUCP (David Bowen) Newsgroups: comp.lang.prolog Subject: Re: converting ascii character lists to functors Message-ID: <1511@quintus.UUCP> Date: 23 Apr 91 22:19:13 GMT References: Reply-To: dave@quintus.UUCP (David Bowen) Distribution: comp Organization: Quintus Corporation Lines: 31 A more efficient way to do this is with library(charsio): | ?- use_module(library(charsio)). | ?- with_output_to_chars( portray_clause(loves(John,Mary,John)), L), with_input_from_chars( read(Term), L). John = _6327, Mary = _6346, L = [108,111,118,101,115,40,65,44,66,44,65,41,46,10], Term = loves(_6768,_6785,_6768) with_output_to_chars(+Goal, -Chars) executes Goal with current output effectively being directed to the character list Chars. with_input_from_chars(+Goal, +Chars) executes Goal with current input effectively being directed to Chars. (portray_clause is a built-in predicate which writes clauses the way that listing does. In particular it takes care of putting the period and newline at the end.) Implementationally, with_output_to_chars creates a stream which writes to a buffer in C. (The buffer is expanded as necessary.) Then it executes the goal which is its first argument with the current output set to that stream. Finally it reads the characters in the buffer and creates a list. No real I/O is involved, so this will be much faster than writing to an intermediate file.