Execute HQ9+/Ursala: Difference between revisions

From Rosetta Code
Content added Content deleted
m (Fixed syntax highlighting.)
 
Line 5: Line 5:
* A line break at the end of the file, if any, is ignored.
* A line break at the end of the file, if any, is ignored.


<lang Ursala>#import std
<syntaxhighlight lang="ursala">#import std
#import nat
#import nat
Line 34: Line 34:
{`h: -[Hello, World!]-!,`9: whole_song99!,`+: <>!,`q: ~&l},
{`h: -[Hello, World!]-!,`9: whole_song99!,`+: <>!,`q: ~&l},
% <.'unrecognized operator: '--+ ~&rNC>),
% <.'unrecognized operator: '--+ ~&rNC>),
~command.files; ~&itZB?/~&h.contents.&iziyQBLD <'usage: rchq [file]'>!%+-</lang>
~command.files; ~&itZB?/~&h.contents.&iziyQBLD <'usage: rchq [file]'>!%+-</syntaxhighlight>

Latest revision as of 10:26, 1 September 2022

Execute HQ9+/Ursala is part of RCHQ9+. You may find other members of RCHQ9+ at Category:RCHQ9+.
Execute HQ9+/Ursala is an implementation of HQ9+. Other implementations of HQ9+.

In this Ursala program, there are the following constraints:

  • Unrecognized operators or a missing input file cause diagnostic messages.
  • Since the accumulator is unreadable and has no operational consequences, its value isn't stored.
  • A line break at the end of the file, if any, is ignored.
#import std                     
#import nat                     
                                
quantity = ~&iNC+ --' of beer'+ ~&?(
   1?=/'1 bottle'! --' bottles'+ ~&h+ %nP,
   'no more bottles'!)

verse =

^(successor,~&); ("s","n"). -[
   -[quantity "s"]- on the wall, -[quantity "s"]-,
   Take one down and pass it around, -[quantity "n"]- on the wall.]-

refrain "n" =

-[
   No more bottles of beer on the wall, -[quantity 0]-.
   Go to the store and buy some more, -[quantity "n"]- on the wall.]-

whole_song "n" = ~&ittt2BSSL (verse*x iota "n")--<refrain "n">

#executable ('parameterized','')

rchq =

<.file$[contents: --<''>]>+ -+
   *= case~&r (
      {`h: -[Hello, World!]-!,`9: whole_song99!,`+: <>!,`q: ~&l},
      % <.'unrecognized operator: '--+ ~&rNC>),
   ~command.files; ~&itZB?/~&h.contents.&iziyQBLD <'usage: rchq [file]'>!%+-