Thanks for the info and the code. Here's me thinking I'm being helpful and
all I'm doing is exposing my ignorance. Well it was intended to explore
Factor and it has done that better than expected.

Cheers,
Gareth Morgan.

On Sat, Jun 6, 2009 at 11:06 PM, Doug Coleman <[email protected]>wrote:

> Hi Morgan,
>
> You're using the ``.'' word which is part of the prettyprinter.  By
> default this vocabulary is not deployed.  You can choose to deploy
> with it by running ``"tests.temperature-converter" deploy-tool'' and
> selecting this option.  Alternately, you don't really need the ``.''
> word -- you can use ``number>string print'' instead and deploy without
> prettyprinting.
>
> Another thing I noticed is that you're not calling ``flush'', so
> output might not be printed to screen and the user will be left
> wondering what's happening.
>
> Here's a way you could write the program without using prettyprint:
>
> USING: ascii combinators io kernel math math.parser sequences
> summary ;
> IN: temp2
>
> ERROR: bad-unit string ;
>
> M: bad-unit summary
>     drop "Please enter ``C'' or ``F'' next time." ;
>
> : prompt-unit ( -- string )
>      "Enter the temperature system to convert from (C/F) or 0 to exit: "
>      write flush    readln [ blank? ] trim >lower
>     dup { "c" "f" } member? [ bad-unit ] unless ;
>
> ERROR: bad-number n ;
>
> M: bad-number summary
>     drop "Please enter a number next time." ;
>
> : prompt-temperature ( -- n )
>     "Enter the temperature to convert: " write flush
>     readln string>number dup [ bad-number ] unless ;
>
> : c-to-f ( num -- num ) 9 * 5 / 32 + ;
> : f-to-c ( num -- num ) 32 - 5 * 9 / ;
>
> : output-temperature ( string n -- )
>     swap {
>        { "c" [ "The temperature in Fahrenheit is " write c-to-f
> number>string p
> rint ] }
>         { "f" [ "The temperature in Celsius is " write f-to-c
> number>string prin
> t ] }
>         [ 2drop "Error: enter C/F on the first line, then a number"
> print ]
>     } case ;
>
> : run-temp ( -- )
>     prompt-unit
>     prompt-temperature
>     output-temperature ;
>
> MAIN: run-temp
>
>
>
> Have fun,
> Doug
>
>
> On Jun 6, 2009, at 1:30 PM, Gareth Morgan wrote:
>
> > Hi, I've been trying to figure out how to code in Factor. I made a
> > trivial vocabulary (a temperature converter) to try and figure a few
> > things out. It runs fine in the listener but when deployed with
> > deploy-tool it fails. The error message suggests die was called and
> > if I didn't call it (which I didn't AFAIK) there is a problem with
> > Factor itself. I'm running Mac OS X 10.5.6. I'm not certain which
> > version of Factor, the About Factor box only says 'Factor' so
> > consider that a second bug report.
> >
> > The code I'm running is:
> >
> --------------------------------------------------------------------------------------
> > USING: io kernel sequences math.parser combinators math
> > prettyprint ;
> > IN: tests.temperature-converter
> >
> > : print-unit-request ( -- )
> >   "Enter the temperature system to convert from " write
> >   "(C/F) or 0 to exit:" write ;
> >
> > : get-unit ( -- char ) readln first ;
> >
> > : request-unit ( -- char ) print-unit-request get-unit ;
> >
> > DEFER: get-correct-unit
> >
> > : get-correct-unit ( -- char ) request-unit
> > {
> >   { [ dup [ CHAR: c = ] [ CHAR: C = ] bi or ] [ drop 1 ] }
> >   { [ dup [ CHAR: f = ] [ CHAR: F = ] bi or ] [ drop 2 ] }
> >   { [ dup CHAR: 0 = ] [ drop 0 "Exiting!" print ] }
> >   [ drop "Incorrect unit!" print get-correct-unit ]
> > } cond ;
> >
> > : print-temp-request ( -- )
> >   "Enter the temperature to convert:" write ;
> >
> > : get-temp ( -- num ) readln string>number ;
> >
> > : request-temp ( -- num ) print-temp-request get-temp ;
> >
> > DEFER: get-correct-temp
> >
> > : get-correct-temp ( -- num ) request-temp dup number? [  ]
> >   [ drop "Invalid temperature!" print get-correct-temp ] if ;
> >
> > : c-to-f ( num -- num ) 9 * 5 / 32 + ;
> > : f-to-c ( num -- num ) 32 - 5 * 9 / ;
> >
> > : output-temp ( num num -- ) swap
> > {
> >   { [ dup 1 = ]
> >     [ drop "The temperature in Fahrenheit is " write . ] }
> >   { [ dup 2 = ]
> >     [ drop "The temperature in Celsius is " write . ] }
> >   [ drop drop "Error!" print ]
> > } cond ;
> >
> > : run-temp-con ( -- ) get-correct-unit
> > {
> >   { [ dup 1 = ] [ get-correct-temp c-to-f output-temp ] }
> >   { [ dup 2 = ] [ get-correct-temp f-to-c output-temp ] }
> >   [ drop ]
> > } cond ;
> >
> > MAIN: run-temp-con
> >
> >
> --------------------------------------------------------------------------------------
> >
> > My attempt to run it from the CLI went
> >
> > Gareth - /Applications/factor/temperature-converter.app/Contents/MacOS
> > : ./tests.temperature-converter
> > Enter the temperature system to convert from (C/F) or 0 to exit:c
> > Enter the temperature to convert:7
> > The temperature in Fahrenheit is The die word was called by the
> > library. Unless you called it yourself,
> > you have triggered a bug in Factor. Please report.
> > Starting low level debugger...
> >   Basic commands:
> > q                -- continue executing Factor - NOT SAFE
> > im               -- save image to fep.image
> > x                -- exit Factor
> >   Advanced commands:
> > d <addr> <count> -- dump memory
> > u <addr>         -- dump object at tagged <addr>
> > . <addr>         -- print object at tagged <addr>
> > t                -- toggle output trimming
> > s r              -- dump data, retain stacks
> > .s .r .c         -- print data, retain, call stacks
> > e                -- dump environment
> > g                -- dump generations
> > card <addr>      -- print card containing address
> > addr <card>      -- print address containing card
> > data             -- data heap dump
> > words            -- words dump
> > tuples           -- tuples dump
> > refs <addr>      -- find data heap references to object
> > push <addr>      -- push object on data stack - NOT SAFE
> > code             -- code heap dump
> > READY
> > x
> >
> >
> ------------------------------------------------------------------------------
> >
> ------------------------------------------------------------------------------
> > OpenSolaris 2009.06 is a cutting edge operating system for enterprises
> > looking to deploy the next generation of Solaris that includes the
> > latest
> > innovations from Sun and the OpenSource community. Download a copy and
> > enjoy capabilities such as Networking, Storage and Virtualization.
> > Go to:
> http://p.sf.net/sfu/opensolaris-get_______________________________________________
> > Factor-talk mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/factor-talk
>
>
>
> ------------------------------------------------------------------------------
> OpenSolaris 2009.06 is a cutting edge operating system for enterprises
> looking to deploy the next generation of Solaris that includes the latest
> innovations from Sun and the OpenSource community. Download a copy and
> enjoy capabilities such as Networking, Storage and Virtualization.
> Go to: http://p.sf.net/sfu/opensolaris-get
> _______________________________________________
> Factor-talk mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/factor-talk
>
------------------------------------------------------------------------------
OpenSolaris 2009.06 is a cutting edge operating system for enterprises 
looking to deploy the next generation of Solaris that includes the latest 
innovations from Sun and the OpenSource community. Download a copy and 
enjoy capabilities such as Networking, Storage and Virtualization. 
Go to: http://p.sf.net/sfu/opensolaris-get
_______________________________________________
Factor-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to