chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Chicken-users] Scraping the REPL?


From: Dan Leslie
Subject: Re: [Chicken-users] Scraping the REPL?
Date: Sun, 24 Jan 2016 09:18:51 -0800
User-agent: mu4e 0.9.13; emacs 24.5.1

Word of warning: Babel seems to be hard-coded for Guile only; there are
several open bugs regarding Babel and Geiser regarding, for instance, it
breaking with Chicken.

-Dan

Alex Charlton <address@hidden> writes:

> Hi James,
>
> The best thing that I've found for creating "living" documents is Org-mode's
> Babel <http://orgmode.org/worg/org-contrib/babel/>. It allows you to write
> code in a document which is  executed when the document is compiled, with
> the source and/or the results getting inserted into the document (which can
> be transformed to LaTeX). If your code generates images, you can even have
> them inserted, too (likely not what you're looking for, but still a cool
> feature!) However, there is one big caveat: Org-mode is an Emacs mode, so
> not only would you need to use Emacs, but so would anyone compiling the
> document. I could understand if this is too much of a barrier of entry for
> your liking.
>
> Another suggestion which seems a bit more in line with your desires would
> be to use a macro like so:
>
> (define counter (make-parameter 1))
>
> (define-syntax repl-print
>   (syntax-rules ()
>     ((_ form)
>      (let ((result form))
>        (printf "#;~s> ~s~%" (counter) (quote form))
>        (unless (equal? result (void))
>          (print result))
>        (counter (add1 (counter)))))))
>
> Which can then be used like so:
> (repl-print (+ 5 1))
> (repl-print (define (f x)  (+ x 1)))
> (repl-print (f 5))
>
> with e.g. something like  `csi -script foo.scm > foo.out` to produce almost
> the same output as your example. One issue this macro has is that it
> doesn't know about whitespace, so you're kind of limited to one line. You
> could work around that by using a pretty printer with a bit of padding
> magic, but it still won't give you "proper" Scheme indentation. Still, most
> REPL examples should be one-liners, I'd think (and hope for your sake ;) )
>
> Whatever you choose to do, good luck with your project! I look forward to
> seeing the result :)
>
> Alex
>
> On Sat, Jan 23, 2016 at 12:51 PM Hefferon, James S. <address@hidden>
> wrote:
>
>>
>> Thank you for the "script" suggestion.  I apologize but I don't understand
>> it.
>>
>> I'm looking for a way to automatically capture an interactive session, and
>> drop
>> it to a file, without cutting and pasting from a terminal or an editor.
>>  When I use
>> LaTeX to compile the book, I'd like that as part of the compilation it runs
>> Chicken's csi and captures the session, so that session can be
>> brought into the document.  (My past experience with cutting and pasting
>> is that as
>> the document changes the code samples get out of sync.  In addition, I'd
>> like that
>> if a person gets the doc off my github account and they compile the doc
>> then they
>> know their setup matches their doc.)
>>
>> That is, I'd like to feed this to csi, and then grab the transcript.
>>
>> #;1> (+ 5 1)
>> 6
>> #;2> (define (f x)
>>     (+ x 1))
>> #;3> (f 5)
>> 6
>>
>> I can get LaTeX to run programs, for example to call "csi -script foo.scm
>> > foo.out".  But
>> I'm not sure if it is possible to grab the REPL without an Expect-type
>> situation.
>>
>> I understand "script" it will give me a single output, and not show the
>> REPL at all.
>> Am I missing the point (probably)?
>>
>> Thank you,
>> Jim
>> _______________________________________________
>> Chicken-users mailing list
>> address@hidden
>> https://lists.nongnu.org/mailman/listinfo/chicken-users
>>
> _______________________________________________
> Chicken-users mailing list
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/chicken-users

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]