USING: kernel quotations help.syntax help.markup ; IN: combinators.cleave ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ARTICLE: "cleave-combinators" "Cleave Combinators" "Basic cleavers:" { $subsection bi } { $subsection tri } "General cleave: " { $subsection cleave } "Cleave combinators for quotations with arity 2:" { $subsection 2bi } { $subsection 2tri } { $notes "From the Merriam-Webster Dictionary: " $nl { $strong "cleave" } { $list { $emphasis "To divide by or as if by a cutting blow" } { $emphasis "To separate into distinct parts and especially into " "groups having divergent views" } } $nl "The Joy programming language has a " { $emphasis "cleave" } " combinator." } ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! HELP: bi { $values { "x" object } { "p" quotation } { "q" quotation } { "p(x)" "p applied to x" } { "q(x)" "q applied to x" } } ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! HELP: tri { $values { "x" object } { "p" quotation } { "q" quotation } { "r" quotation } { "p(x)" "p applied to x" } { "q(x)" "q applied to x" } { "r(x)" "r applied to x" } } ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! HELP: cleave { $code "( obj { q1 q2 ... qN } -- q1(obj) q2(obj) ... qN(obj) )" } ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! { bi tri cleave 2bi 2tri } related-words ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ARTICLE: "spread-combinators" "Spread Combinators" { $subsection bi* } { $subsection tri* } { $subsection spread } ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! HELP: bi* { $values { "x" object } { "y" object } { "p" quotation } { "q" quotation } { "p(x)" "p applied to x" } { "q(y)" "q applied to y" } } ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! HELP: tri* { $values { "x" object } { "y" object } { "z" object } { "p" quotation } { "q" quotation } { "r" quotation } { "p(x)" "p applied to x" } { "q(y)" "q applied to y" } { "r(z)" "r applied to z" } } ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! HELP: spread { $code "( v1 v2 ... vN { q1 q2 ... qN } -- q1(v1) q2(v2) ... qN(vN) )" } ;