Urbit Developers
  • Hoon

    • Overview
    • Cheat Sheet
    • Irregular forms
    • Hoon Errors
    • Hoon Style Guide
    • Basic Types
    • Advanced Types
    • Auras
    • Arvo
    • Standard Library

      • 1a: Basic Arithmetic
      • 1b: Tree Addressing
      • 1c: Molds and Mold-Builders
      • 2a: Unit Logic
      • 2b: List Logic
      • 2c: Bit Arithmetic
      • 2d: Bit Logic
      • 2e: Insecure Hashing
      • 2f: Noun Ordering
      • 2g: Unsigned Powers
      • 2h: Set Logic
      • 2i: Map Logic
      • 2j: Jar and Jug Logic
      • 2k: Queue Logic
      • 2l: Container from Container
      • 2m: Container from Noun
      • 2n: Functional Hacks
      • 2o: Normalizing Containers
      • 2p: Serialization
      • 2q: Molds and Mold-Builders
      • 3a: Modular and Signed Ints
      • 3b: Floating Point
      • 3c: Urbit Time
      • 3d: SHA Hash Family
      • 3e: AES encryption (Removed)
      • 3f: Scrambling
      • 3g: Molds and Mold-Builders
      • 4a: Exotic Bases
      • 4b: Text Processing
      • 4c: Tank Printer
      • 4d: Parsing (Tracing)
      • 4e: Parsing (Combinators)
      • 4f: Parsing (Rule-Builders)
      • 4g: Parsing (Outside Caller)
      • 4h: Parsing (ASCII Glyphs)
      • 4i: Parsing (Useful Idioms)
      • 4j: Parsing (Bases and Base Digits)
      • 4k: Atom Printing
      • 4l: Atom Parsing
      • 4m: Formatting Functions
      • 4n: Virtualization
      • 4o: Molds
      • 5a: Compiler Utilities
      • 5b: Macro Expansion
      • 5c: Compiler Backend & Prettyprinter
      • 5d: Parser
      • 5e: Molds and mold builders
      • 5f: Profiling support
      • Runes

        • Constants (Atoms and Strings)
        • + lus · Arms
        • | bar · Cores
        • $ buc · Structures
        • % cen · Calls
        • : col · Cells
        • . dot · Nock
        • / fas · Imports
        • ^ ket · Casts
        • ; mic · Make
        • ~ sig · Hints
        • = tis · Subject
        • ? wut · Conditionals
        • ! zap · Wild
        • --, == Terminators
        • Limbs and wings

          • Limbs
          • Wings
          • Zuse

            • 2d(1-5): To JSON, Wains
            • 2d(6): From JSON
            • 2d(7): From JSON (unit)
            • 2e(2-3): Print & Parse JSON
            • 2m: Ordered Maps
          • Arvo

            • Overview
            • Ames

              • Overview
              • Cryptography
              • API Reference
              • Scry Reference
              • Data Types
              • Behn

                • Overview
                • API Reference
                • Scry Reference
                • Examples
                • Clay

                  • Overview
                  • Architecture
                  • Using Clay
                  • Data Types
                  • Scry Reference
                  • API Reference
                  • Examples
                  • Marks

                    • Overview
                    • Writing Marks
                    • Using Marks
                    • Examples
                  • Dill

                    • Overview
                    • API Reference
                    • Scry Reference
                    • Data Types
                    • Eyre

                      • Overview
                      • External API Reference
                      • Internal API Reference
                      • Scry Reference
                      • Data Types
                      • Guide
                      • Gall

                        • Overview
                        • API Reference
                        • Scry Reference
                        • Data Types
                        • Threads Reference
                        • Iris

                          • Overview
                          • API Reference
                          • Data Types
                          • Example
                          • Jael

                            • Overview
                            • API Reference
                            • Scry Reference
                            • Data Types
                            • Examples
                            • Khan

                              • Overview
                              • API Reference
                              • Data Types
                              • Example
                              • Threads

                                • Overview
                                • HTTP API
                                • Reference
                                • Gall

                                  • Start Thread
                                  • Take Result
                                  • Take Facts
                                  • Stop Thread
                                  • Poke Thread
                                  • Examples

                                    • Fetch JSON
                                    • Child Thread
                                    • Main-loop
                                    • Poke Agent
                                    • Scry
                                    • Take Fact
                                  • Concepts

                                    • Scries
                                    • Subscriptions
                                    • Tutorials

                                      • Move Trace
                                      • Reference

                                        • Cryptography
                                        • Filesystem Hierarchy
                                      • Nock

                                        • Nock Definition
                                        • Explanation
                                        • Example
                                        • Implementations
                                        • Vere

                                          • C Runtime System
                                          • Land of Nouns
                                          • API overview by prefix
                                          • C in Urbit
                                          • Writing Jets
                                          • Cryptography
                                          • Azimuth

                                            • Overview
                                            • Urbit HD Wallet
                                            • Azimuth Data Flow
                                            • Azimuth.eth
                                            • Ecliptic.eth
                                            • Advanced Azimuth Tools
                                            • Life and Rift
                                            • Layer 2

                                              • Layer 2 Overview
                                              • Layer 2 Actions
                                              • Transaction Format
                                              • Rollers
                                              • Roller HTTP RPC-API
                                              • Custom Roller Tutorial
                                            • Glossary

                                              • Agent
                                              • Ames
                                              • API
                                              • Aqua
                                              • Arm
                                              • Arvo
                                              • Atom
                                              • Aura
                                              • Aural ASCII
                                              • Azimuth
                                              • Battery
                                              • Behn
                                              • Bowl
                                              • Bridge
                                              • Bunt
                                              • Card
                                              • Case
                                              • Cask
                                              • Cell
                                              • Censures
                                              • Claims
                                              • Clay
                                              • Cold atom
                                              • Comet
                                              • Commit
                                              • Cons
                                              • Context
                                              • Cord
                                              • Core
                                              • Delegated Sending
                                              • Desk
                                              • Dill
                                              • Document Proposal
                                              • Dojo
                                              • Door
                                              • Double-boot
                                              • Dry Gate
                                              • Duct
                                              • Ecliptic
                                              • Entropy
                                              • Event Log
                                              • Eyre
                                              • Face
                                              • Fact
                                              • Foo Bar Baz
                                              • Galaxy
                                              • Gall
                                              • Garden
                                              • Gate
                                              • Generator
                                              • Gift
                                              • Glob
                                              • HD Wallet
                                              • Helm
                                              • Hood
                                              • Hoon
                                              • Invite Tree
                                              • Iris
                                              • Jael
                                              • Jet
                                              • Kelvin versioning
                                              • Kelvin versioning
                                              • Keyfile
                                              • Keywords
                                              • Khan
                                              • Kiln
                                              • Landscape
                                              • Leg
                                              • List
                                              • Loobean
                                              • Lull
                                              • Mark
                                              • Metals
                                              • Mold
                                              • Monad
                                              • Moon
                                              • Move
                                              • Nock
                                              • Noun
                                              • ~
                                              • OTA Updates
                                              • Path Prefix
                                              • Path
                                              • @p
                                              • Payload
                                              • Peek
                                              • pH
                                              • Pier
                                              • Pill
                                              • Planet
                                              • Poke
                                              • Proxies
                                              • Scry
                                              • Replay
                                              • Factory Reset
                                              • Roller
                                              • Naive rollups
                                              • Rune
                                              • Runtime
                                              • Sail
                                              • Sample
                                              • Scry
                                              • Senate
                                              • Ship
                                              • Slam
                                              • Spider
                                              • Sponsor
                                              • Star
                                              • String
                                              • Subject Oriented Programming
                                              • Subject
                                              • Subscription
                                              • Tape
                                              • Thread
                                              • Trap
                                              • Udon
                                              • Upgrade Proposal
                                              • Userspace
                                              • Vane
                                              • Vase
                                              • Vere
                                              • Voting
                                              • Warm atom
                                              • Wet Gate
                                              • Wing
                                              • Wire
                                              • Wrapper
                                              • ~zod
                                              • Zuse
                                              • Additional

                                                • Cryptography
                                                • Mips (Maps of Maps)
                                                • Software Distribution

                                                  • Overview
                                                  • Docket File
                                                  • Glob
                                                Urbit Developers
                                                • Hoon

                                                  • Overview
                                                  • Cheat Sheet
                                                  • Irregular forms
                                                  • Hoon Errors
                                                  • Hoon Style Guide
                                                  • Basic Types
                                                  • Advanced Types
                                                  • Auras
                                                  • Arvo
                                                  • Standard Library

                                                    • 1a: Basic Arithmetic
                                                    • 1b: Tree Addressing
                                                    • 1c: Molds and Mold-Builders
                                                    • 2a: Unit Logic
                                                    • 2b: List Logic
                                                    • 2c: Bit Arithmetic
                                                    • 2d: Bit Logic
                                                    • 2e: Insecure Hashing
                                                    • 2f: Noun Ordering
                                                    • 2g: Unsigned Powers
                                                    • 2h: Set Logic
                                                    • 2i: Map Logic
                                                    • 2j: Jar and Jug Logic
                                                    • 2k: Queue Logic
                                                    • 2l: Container from Container
                                                    • 2m: Container from Noun
                                                    • 2n: Functional Hacks
                                                    • 2o: Normalizing Containers
                                                    • 2p: Serialization
                                                    • 2q: Molds and Mold-Builders
                                                    • 3a: Modular and Signed Ints
                                                    • 3b: Floating Point
                                                    • 3c: Urbit Time
                                                    • 3d: SHA Hash Family
                                                    • 3e: AES encryption (Removed)
                                                    • 3f: Scrambling
                                                    • 3g: Molds and Mold-Builders
                                                    • 4a: Exotic Bases
                                                    • 4b: Text Processing
                                                    • 4c: Tank Printer
                                                    • 4d: Parsing (Tracing)
                                                    • 4e: Parsing (Combinators)
                                                    • 4f: Parsing (Rule-Builders)
                                                    • 4g: Parsing (Outside Caller)
                                                    • 4h: Parsing (ASCII Glyphs)
                                                    • 4i: Parsing (Useful Idioms)
                                                    • 4j: Parsing (Bases and Base Digits)
                                                    • 4k: Atom Printing
                                                    • 4l: Atom Parsing
                                                    • 4m: Formatting Functions
                                                    • 4n: Virtualization
                                                    • 4o: Molds
                                                    • 5a: Compiler Utilities
                                                    • 5b: Macro Expansion
                                                    • 5c: Compiler Backend & Prettyprinter
                                                    • 5d: Parser
                                                    • 5e: Molds and mold builders
                                                    • 5f: Profiling support
                                                    • Runes

                                                      • Constants (Atoms and Strings)
                                                      • + lus · Arms
                                                      • | bar · Cores
                                                      • $ buc · Structures
                                                      • % cen · Calls
                                                      • : col · Cells
                                                      • . dot · Nock
                                                      • / fas · Imports
                                                      • ^ ket · Casts
                                                      • ; mic · Make
                                                      • ~ sig · Hints
                                                      • = tis · Subject
                                                      • ? wut · Conditionals
                                                      • ! zap · Wild
                                                      • --, == Terminators
                                                      • Limbs and wings

                                                        • Limbs
                                                        • Wings
                                                        • Zuse

                                                          • 2d(1-5): To JSON, Wains
                                                          • 2d(6): From JSON
                                                          • 2d(7): From JSON (unit)
                                                          • 2e(2-3): Print & Parse JSON
                                                          • 2m: Ordered Maps
                                                        • Arvo

                                                          • Overview
                                                          • Ames

                                                            • Overview
                                                            • Cryptography
                                                            • API Reference
                                                            • Scry Reference
                                                            • Data Types
                                                            • Behn

                                                              • Overview
                                                              • API Reference
                                                              • Scry Reference
                                                              • Examples
                                                              • Clay

                                                                • Overview
                                                                • Architecture
                                                                • Using Clay
                                                                • Data Types
                                                                • Scry Reference
                                                                • API Reference
                                                                • Examples
                                                                • Marks

                                                                  • Overview
                                                                  • Writing Marks
                                                                  • Using Marks
                                                                  • Examples
                                                                • Dill

                                                                  • Overview
                                                                  • API Reference
                                                                  • Scry Reference
                                                                  • Data Types
                                                                  • Eyre

                                                                    • Overview
                                                                    • External API Reference
                                                                    • Internal API Reference
                                                                    • Scry Reference
                                                                    • Data Types
                                                                    • Guide
                                                                    • Gall

                                                                      • Overview
                                                                      • API Reference
                                                                      • Scry Reference
                                                                      • Data Types
                                                                      • Threads Reference
                                                                      • Iris

                                                                        • Overview
                                                                        • API Reference
                                                                        • Data Types
                                                                        • Example
                                                                        • Jael

                                                                          • Overview
                                                                          • API Reference
                                                                          • Scry Reference
                                                                          • Data Types
                                                                          • Examples
                                                                          • Khan

                                                                            • Overview
                                                                            • API Reference
                                                                            • Data Types
                                                                            • Example
                                                                            • Threads

                                                                              • Overview
                                                                              • HTTP API
                                                                              • Reference
                                                                              • Gall

                                                                                • Start Thread
                                                                                • Take Result
                                                                                • Take Facts
                                                                                • Stop Thread
                                                                                • Poke Thread
                                                                                • Examples

                                                                                  • Fetch JSON
                                                                                  • Child Thread
                                                                                  • Main-loop
                                                                                  • Poke Agent
                                                                                  • Scry
                                                                                  • Take Fact
                                                                                • Concepts

                                                                                  • Scries
                                                                                  • Subscriptions
                                                                                  • Tutorials

                                                                                    • Move Trace
                                                                                    • Reference

                                                                                      • Cryptography
                                                                                      • Filesystem Hierarchy
                                                                                    • Nock

                                                                                      • Nock Definition
                                                                                      • Explanation
                                                                                      • Example
                                                                                      • Implementations
                                                                                      • Vere

                                                                                        • C Runtime System
                                                                                        • Land of Nouns
                                                                                        • API overview by prefix
                                                                                        • C in Urbit
                                                                                        • Writing Jets
                                                                                        • Cryptography
                                                                                        • Azimuth

                                                                                          • Overview
                                                                                          • Urbit HD Wallet
                                                                                          • Azimuth Data Flow
                                                                                          • Azimuth.eth
                                                                                          • Ecliptic.eth
                                                                                          • Advanced Azimuth Tools
                                                                                          • Life and Rift
                                                                                          • Layer 2

                                                                                            • Layer 2 Overview
                                                                                            • Layer 2 Actions
                                                                                            • Transaction Format
                                                                                            • Rollers
                                                                                            • Roller HTTP RPC-API
                                                                                            • Custom Roller Tutorial
                                                                                          • Glossary

                                                                                            • Agent
                                                                                            • Ames
                                                                                            • API
                                                                                            • Aqua
                                                                                            • Arm
                                                                                            • Arvo
                                                                                            • Atom
                                                                                            • Aura
                                                                                            • Aural ASCII
                                                                                            • Azimuth
                                                                                            • Battery
                                                                                            • Behn
                                                                                            • Bowl
                                                                                            • Bridge
                                                                                            • Bunt
                                                                                            • Card
                                                                                            • Case
                                                                                            • Cask
                                                                                            • Cell
                                                                                            • Censures
                                                                                            • Claims
                                                                                            • Clay
                                                                                            • Cold atom
                                                                                            • Comet
                                                                                            • Commit
                                                                                            • Cons
                                                                                            • Context
                                                                                            • Cord
                                                                                            • Core
                                                                                            • Delegated Sending
                                                                                            • Desk
                                                                                            • Dill
                                                                                            • Document Proposal
                                                                                            • Dojo
                                                                                            • Door
                                                                                            • Double-boot
                                                                                            • Dry Gate
                                                                                            • Duct
                                                                                            • Ecliptic
                                                                                            • Entropy
                                                                                            • Event Log
                                                                                            • Eyre
                                                                                            • Face
                                                                                            • Fact
                                                                                            • Foo Bar Baz
                                                                                            • Galaxy
                                                                                            • Gall
                                                                                            • Garden
                                                                                            • Gate
                                                                                            • Generator
                                                                                            • Gift
                                                                                            • Glob
                                                                                            • HD Wallet
                                                                                            • Helm
                                                                                            • Hood
                                                                                            • Hoon
                                                                                            • Invite Tree
                                                                                            • Iris
                                                                                            • Jael
                                                                                            • Jet
                                                                                            • Kelvin versioning
                                                                                            • Kelvin versioning
                                                                                            • Keyfile
                                                                                            • Keywords
                                                                                            • Khan
                                                                                            • Kiln
                                                                                            • Landscape
                                                                                            • Leg
                                                                                            • List
                                                                                            • Loobean
                                                                                            • Lull
                                                                                            • Mark
                                                                                            • Metals
                                                                                            • Mold
                                                                                            • Monad
                                                                                            • Moon
                                                                                            • Move
                                                                                            • Nock
                                                                                            • Noun
                                                                                            • ~
                                                                                            • OTA Updates
                                                                                            • Path Prefix
                                                                                            • Path
                                                                                            • @p
                                                                                            • Payload
                                                                                            • Peek
                                                                                            • pH
                                                                                            • Pier
                                                                                            • Pill
                                                                                            • Planet
                                                                                            • Poke
                                                                                            • Proxies
                                                                                            • Scry
                                                                                            • Replay
                                                                                            • Factory Reset
                                                                                            • Roller
                                                                                            • Naive rollups
                                                                                            • Rune
                                                                                            • Runtime
                                                                                            • Sail
                                                                                            • Sample
                                                                                            • Scry
                                                                                            • Senate
                                                                                            • Ship
                                                                                            • Slam
                                                                                            • Spider
                                                                                            • Sponsor
                                                                                            • Star
                                                                                            • String
                                                                                            • Subject Oriented Programming
                                                                                            • Subject
                                                                                            • Subscription
                                                                                            • Tape
                                                                                            • Thread
                                                                                            • Trap
                                                                                            • Udon
                                                                                            • Upgrade Proposal
                                                                                            • Userspace
                                                                                            • Vane
                                                                                            • Vase
                                                                                            • Vere
                                                                                            • Voting
                                                                                            • Warm atom
                                                                                            • Wet Gate
                                                                                            • Wing
                                                                                            • Wire
                                                                                            • Wrapper
                                                                                            • ~zod
                                                                                            • Zuse
                                                                                            • Additional

                                                                                              • Cryptography
                                                                                              • Mips (Maps of Maps)
                                                                                              • Software Distribution

                                                                                                • Overview
                                                                                                • Docket File
                                                                                                • Glob
                                                                                              Reference/Hoon/Standard Library

                                                                                              4e: Parsing (Combinators)

                                                                                              ++bend

                                                                                              Conditional composer

                                                                                              Parsing composer: connects the edge vex with the subsequent rule sab as an optional suffix, using gate raq to compose or reject its result. If there is no suffix, or if the suffix fails to be composed with the current result, the current result is produced. Used to map a group of rules to a specified output.

                                                                                              Accepts

                                                                                              raq is a gate.

                                                                                              sab is a rule.

                                                                                              vex is an edge.

                                                                                              Produces

                                                                                              A rule.

                                                                                              Source

                                                                                              ++ bend
                                                                                              ~/ %bend
                                                                                              =+ raq=|*([a=* b=*] [~ u=[a b]])
                                                                                              |@
                                                                                              ++ $
                                                                                              ~/ %fun
                                                                                              |* [vex=edge sab=rule]
                                                                                              ?~ q.vex
                                                                                              vex
                                                                                              =+ yit=(sab q.u.q.vex)
                                                                                              =+ yur=(last p.vex p.yit)
                                                                                              ?~ q.yit
                                                                                              [p=yur q=q.vex]
                                                                                              =+ vux=(raq p.u.q.vex p.u.q.yit)
                                                                                              ?~ vux
                                                                                              [p=yur q=q.vex]
                                                                                              [p=yur q=[~ u=[p=u.vux q=q.u.q.yit]]]
                                                                                              --

                                                                                              Examples

                                                                                              > (;~((bend |=([a=char b=char] ?.(=(a b) ~ (some +(a))))) prn prn) [1 1] "qs")
                                                                                              [p=[p=1 q=3] q=[~ u=[p=113 q=[p=[p=1 q=2] q="s"]]]]
                                                                                              > (;~((bend |=([a=char b=char] ?.(=(a b) ~ (some +(a))))) prn prn) [1 1] "qqq")
                                                                                              [p=[p=1 q=3] q=[~ u=[p=114 q=[p=[p=1 q=3] q="q"]]]]
                                                                                              > `@t`(scan "aa" ;~((bend |=([a=char b=char] ?.(=(a b) ~ (some +(a))))) prn prn))
                                                                                              'b'
                                                                                              > (scan "ba" ;~((bend |=([a=char b=char] ?.(=(a b) ~ (some +(a))))) prn prn))
                                                                                              {1 3}
                                                                                              syntax error
                                                                                              > `(unit @tas)`(scan "" ;~((bend) (easy ~) sym))
                                                                                              ~
                                                                                              > `(unit @tas)`(scan "sep" ;~((bend) (easy ~) sym))
                                                                                              [~ %sep]

                                                                                              ++comp

                                                                                              Arbitrary compose

                                                                                              Parsing composer: connects the edge vex with a following rule sab, combining the contents of vex with the result of sab using a binary gate raq. Used to fold over the results of several rules.

                                                                                              Accepts

                                                                                              raq is a gate that accepts a cell of two nouns, a and b, and produces a cell of two nouns.

                                                                                              vex is an edge.

                                                                                              sab is a rule.

                                                                                              Produces

                                                                                              A rule.

                                                                                              Source

                                                                                              ++ comp
                                                                                              ~/ %comp
                                                                                              =+ raq=|*([a=* b=*] [a b])
                                                                                              |@
                                                                                              ++ $
                                                                                              ~/ %fun
                                                                                              |* [vex=edge sab=rule]
                                                                                              ~! +<
                                                                                              ?~ q.vex
                                                                                              vex
                                                                                              =+ yit=(sab q.u.q.vex)
                                                                                              =+ yur=(last p.vex p.yit)
                                                                                              ?~ q.yit
                                                                                              [p=yur q=q.yit]
                                                                                              [p=yur q=[~ u=[p=(raq p.u.q.vex p.u.q.yit) q=q.u.q.yit]]]
                                                                                              --

                                                                                              Examples

                                                                                              > (scan "123" ;~((comp |=([a=@ud b=@ud] (add a b))) dit dit dit))
                                                                                              6
                                                                                              > (scan "12" ;~((comp |=([a=@ud b=@ud] (add a b))) dit dit dit))
                                                                                              {1 3}
                                                                                              syntax error

                                                                                              ++fail

                                                                                              Never parse

                                                                                              Produces an edge at the same text position (hair) with a failing result (q=~).

                                                                                              Accepts

                                                                                              tub is a nail.

                                                                                              Produces

                                                                                              An edge.

                                                                                              Source

                                                                                              ++ fail |=(tub=nail [p=p.tub q=~])

                                                                                              Examples

                                                                                              > (fail [[1 1] "abc"])
                                                                                              [p=[p=1 q=1] q=~]
                                                                                              > (fail [[p=1.337 q=70] "Parse me, please?"])
                                                                                              [p=[p=1.337 q=70] q=~]

                                                                                              ++glue

                                                                                              Skip delimiter

                                                                                              Parsing composer: connects an edge vex with a following rule sab by parsing the rule bus (the delimiting symbol) and throwing out the result.

                                                                                              Accepts

                                                                                              bus is a rule.

                                                                                              vex is an edge.

                                                                                              sab is a rule.

                                                                                              Produces

                                                                                              A rule.

                                                                                              Source

                                                                                              ++ glue
                                                                                              ~/ %glue
                                                                                              |* bus=rule
                                                                                              ~/ %fun
                                                                                              |* [vex=edge sab=rule]
                                                                                              (plug vex ;~(pfix bus sab))

                                                                                              Examples

                                                                                              > `[@ud @tas @tas]`(scan "200|mal|bon" ;~((glue bar) dem sym sym))
                                                                                              [200 %mal %bon]
                                                                                              > `[@ud @t @tas]`(scan "200|;|bon" ;~((glue bar) dem mic sym))
                                                                                              [200 ';' %bon]

                                                                                              ++less

                                                                                              Parse unless

                                                                                              Parsing composer: if an edge vex reflects a success, fail. Otherwise, connect vex with the following rule.

                                                                                              Accepts

                                                                                              vex is an edge.

                                                                                              sab is a rule.

                                                                                              Produces

                                                                                              An edge.

                                                                                              Source

                                                                                              ++ less
                                                                                              |* [vex=edge sab=rule]
                                                                                              ?~ q.vex
                                                                                              =+ roq=(sab)
                                                                                              [p=(last p.vex p.roq) q=q.roq]
                                                                                              (fail +<.sab)

                                                                                              Examples

                                                                                              > (scan "sas-/lo" (star ;~(less lus bar prn)))
                                                                                              "sas-/lo"
                                                                                              > (scan "sas-/l+o" (star ;~(less lus bar prn)))
                                                                                              ! {1 8}
                                                                                              ! exit
                                                                                              > (scan "sas|-/lo" (star ;~(less lus bar prn)))
                                                                                              ! {1 5}
                                                                                              ! exit

                                                                                              ++pfix

                                                                                              Discard first rule

                                                                                              Parsing composer: connects an edge vex with two subsequent rules, ignoring the result of the first and producing the result of the second.

                                                                                              Accepts

                                                                                              vex is an edge.

                                                                                              sab is a rule.

                                                                                              Produces

                                                                                              An edge.

                                                                                              Source

                                                                                              ++ pfix
                                                                                              ~/ %pfix
                                                                                              |* sam=[vex=edge sab=rule]
                                                                                              %. sam
                                                                                              (comp |*([a=* b=*] b))

                                                                                              Examples

                                                                                              > `@t`(scan "%him" ;~(pfix cen sym))
                                                                                              'him'
                                                                                              > (scan "+++10" ;~(pfix (star lus) dem))
                                                                                              10

                                                                                              ++plug

                                                                                              Parse to tuple

                                                                                              Parsing composer: connects an edge vex with a following rule sab, producing a cell of both the results. See also: the monad applicator ;~ for a more detailed explanation.

                                                                                              Accepts

                                                                                              vex is an edge.

                                                                                              sab is a rule.

                                                                                              Produces

                                                                                              An edge.

                                                                                              Source

                                                                                              ++ plug
                                                                                              ~/ %plug
                                                                                              |* [vex=edge sab=rule]
                                                                                              ?~ q.vex
                                                                                              vex
                                                                                              =+ yit=(sab q.u.q.vex)
                                                                                              =+ yur=(last p.vex p.yit)
                                                                                              ?~ q.yit
                                                                                              [p=yur q=q.yit]
                                                                                              [p=yur q=[~ u=[p=[p.u.q.vex p.u.q.yit] q=q.u.q.yit]]]

                                                                                              Examples

                                                                                              > (scan "1..20" ;~(plug dem dot dot dem))
                                                                                              [1 '.' '.' 20]

                                                                                              ++pose

                                                                                              Parse options

                                                                                              Parsing composer: if vex reflects a failure, connect it with the following rule sab. See also: the monad applicator ;~

                                                                                              Accepts

                                                                                              vex is an edge.

                                                                                              sab is a rule.

                                                                                              Produces

                                                                                              An edge.

                                                                                              Source

                                                                                              ++ pose
                                                                                              ~/ %pose
                                                                                              |* [vex=edge sab=rule]
                                                                                              ?~ q.vex
                                                                                              =+ roq=(sab)
                                                                                              [p=(last p.vex p.roq) q=q.roq]
                                                                                              vex

                                                                                              Examples

                                                                                              > `@t`(scan "+" ;~(pose lus tar cen))
                                                                                              '+'
                                                                                              > `@t`(scan "*" ;~(pose lus tar cen))
                                                                                              '*'
                                                                                              > `@t`(scan "%" ;~(pose lus tar cen))
                                                                                              '%'
                                                                                              > `@t`(scan "-" ;~(pose lus tar cen))
                                                                                              ! {1 1}
                                                                                              ! exit

                                                                                              ++sfix

                                                                                              Discard second rule

                                                                                              Parsing composer: connects edge vex with two subsequent rules returning the result of the first and discarding the result of the second.

                                                                                              Accepts

                                                                                              vex is an edge.

                                                                                              sab is a rule.

                                                                                              Produces

                                                                                              An edge.

                                                                                              Source

                                                                                              ++ sfix
                                                                                              ~/ %sfix
                                                                                              |* sam=[vex=edge sab=rule]
                                                                                              %. sam
                                                                                              (comp |*([a=* b=*] a))

                                                                                              Examples

                                                                                              > `@t`(scan "him%" ;~(sfix sym cen))
                                                                                              'him'
                                                                                              > (scan "10+++" ;~(sfix dem (star lus)))
                                                                                              q=10

                                                                                              ++simu

                                                                                              First and second

                                                                                              Parsing composer: if an edge vex reflects a failure, fail. Otherwise, connect vex with the following rule.

                                                                                              Accepts

                                                                                              vex is an edge.

                                                                                              sab is a rule.

                                                                                              Produces

                                                                                              An edge.

                                                                                              Source

                                                                                              ++ simu
                                                                                              |* [vex=edge sab=rule]
                                                                                              ?~ q.vex
                                                                                              vex
                                                                                              =+ roq=(sab)
                                                                                              roq

                                                                                              Examples

                                                                                              > (scan "~zod" scat:vast)
                                                                                              [%dtzy p=%p q=0]
                                                                                              > (scan "%zod" scat:vast)
                                                                                              [%dtzz p=%tas q=6.582.138]
                                                                                              > (scan "%zod" ;~(simu cen scat:vast))
                                                                                              [%dtzz p=%tas q=6.582.138]
                                                                                              > (scan "~zod" ;~(simu cen scat:vast))
                                                                                              ! {1 1}
                                                                                              ! exit

                                                                                              <-

                                                                                              4d: Parsing (Tracing)

                                                                                              4f: Parsing (Rule-Builders)

                                                                                              ->

                                                                                              Edit this page on GitHub

                                                                                              Last modified June 13, 2023