<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mw.lojban.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ramcinfo</id>
	<title>Lojban - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://mw.lojban.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ramcinfo"/>
	<link rel="alternate" type="text/html" href="https://mw.lojban.org/papri/Special:Contributions/Ramcinfo"/>
	<updated>2026-11-05T05:57:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/scope_study&amp;diff=121243</id>
		<title>User:Ramcinfo/scope study</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/scope_study&amp;diff=121243"/>
		<updated>2016-09-23T12:29:39Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scope operators are things that modify predications as a whole (bridi operators) or predicates (selbri operators). They are: tenses, some (or all, depending on whom you ask) modals, {na} negation, {da}, outer quantifiers, connectives, and constructs modified by {ji&#039;a} and {po&#039;o}. They are called scope operators because when multiple are present in the same bridi, they modify the bridi in the order based on their order in the bridi text.&lt;br /&gt;
&lt;br /&gt;
== Tenses and modals ==&lt;br /&gt;
When one operator modifies the result of another, it is said for latter to be in the scope of former.&amp;lt;ref&amp;gt;http://lojban.github.io/cll/10/13/, example 13.7&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba] culno fa lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
Linking operator to selbri with {be} allows to incorporate it into the selbri. It acts on selbri only, producing new, modified selbri, so it scopes after all other operators (and even after regular sumti, in a way).&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba] cunlo ⟨be di&#039;a⟩ fa lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
Another way to incorporate an operator into selbri is {jai}-conversion. Such a link will have scope below operators linked with {be}, if any:&lt;br /&gt;
&lt;br /&gt;
  ma [va&#039;o ti] [ba] ⟨jai gau⟩ cunlo ⟨be di&#039;a⟩ fai lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
The order of bridi operators relative to other parts of bridi (being selbri and sumti) is irrelevant. Let us move them all in front of bridi. (We&#039;re adding {ku} to {ba} to turn it into sumti tcita from selbri tcita, so it could be an independent term.)&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba ku] [se va&#039;u mi] (⟨di&#039;a ku⟩ ⟨gau ma⟩ culno) fa lo kabri&lt;br /&gt;
&lt;br /&gt;
The operators modify the meaning of the sumti in this way:&lt;br /&gt;
&lt;br /&gt;
  (va&#039;o ti (ba ku (se va&#039;u mi ((di&#039;a ku (gau ma (culno))) fa lo kabri))))&lt;br /&gt;
&lt;br /&gt;
or using composition and reverse-apply operators:&lt;br /&gt;
&lt;br /&gt;
  (va&#039;o ti ∘ ba ku ∘ se va&#039;u mi)(d&#039;a ku ∘ gau ma ∘ culno)(fa lo kabri)&lt;br /&gt;
&lt;br /&gt;
 The following happens in present context:&lt;br /&gt;
   The following happens in the future:&lt;br /&gt;
     The following happens for me:&lt;br /&gt;
       The thing is a cup&lt;br /&gt;
         This is done again:&lt;br /&gt;
           This is done by whom, I want to know.&lt;br /&gt;
             The thing is full.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be noted what a tense stating both direction and interval is one operator; and in fact such tenses give their component in order reverse to the order of operators, e.g. {puzi} is equivalent to {ziku puku}.&lt;br /&gt;
&lt;br /&gt;
== Quantifiers ==&lt;br /&gt;
&lt;br /&gt;
{na}, absent in the example above, behaves the same way, as do outer quantifiers — except the latter create {da}* variables behind the scene:&lt;br /&gt;
&lt;br /&gt;
  mi na pendo ci gerku   =&amp;gt; [na ku] [ci da poi gerku] zo&#039;u mi pendo da&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;It is not true what each of four dogs is my pet&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  mi pendo ci gerku naku =&amp;gt; [ci da poi gerku] [na ku] zo&#039;u mi pendo da&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;For each of four dogs, it is not true what it is my pet&amp;quot;&lt;br /&gt;
  (e.g. no one of four dogs is my pet)&lt;br /&gt;
&lt;br /&gt;
== Connectives ==&lt;br /&gt;
&lt;br /&gt;
Logical connectives could be reduced to outer quantifiers, but it easier to expand them to bridi connectives. For latter, scope of operator inside first connected bridi ends at the end of the bridi, before the connective:&lt;br /&gt;
&lt;br /&gt;
   (mi [na] sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I am not sleepy. And I am happy&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Scope of any operator could be extended to the connected predicates through common prenex:&lt;br /&gt;
&lt;br /&gt;
   [naku] zo&#039;u (mi sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;It is not true what (I am sleepy and I am happy)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Other connectives are expanded to bridi connectives:&lt;br /&gt;
&lt;br /&gt;
   mi [na] (sipta&#039;i) je (gleki) =&amp;gt; [na] zo&#039;u (mi sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
   mi (sipta&#039;i) je (gleki) naku =&amp;gt; (mi sipta&#039;i [naku]) .ije (mi gleki [naku])&lt;br /&gt;
&lt;br /&gt;
   mi [na] (sipta&#039;i) gi&#039;e (gleki) =&amp;gt; (mi [na] sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
   mi [naku] (sipta&#039;i) gi&#039;e (gleki) =&amp;gt; [naku] zo&#039;u (mi sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
   mi (sipta&#039;i) gi&#039;e (gleki [naku]) =&amp;gt; (mi sipta&#039;i) .ije (mi gleki [naku])&lt;br /&gt;
   mi (sipta&#039;i) gi&#039;e (gleki vau) [naku] =&amp;gt; (mi sipta&#039;i [naku]) .ije (mi gleki [naku])&lt;br /&gt;
&lt;br /&gt;
   mi .e do [na] sipta&#039;i =&amp;gt; (mi [na] sipta&#039;i) .ije (do [na] sipta&#039;i)&lt;br /&gt;
   naku mi .e do sipta&#039;i =&amp;gt; [naku] zo&#039;u (mi sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
&lt;br /&gt;
* Rewrite more clearly.&lt;br /&gt;
* Review with other Lojbanists.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Study done with the help of omni___, xorxes, Ilmen, gleki and latro`a; and maybe someone I forgot to mention — sorry, then.&lt;br /&gt;
&lt;br /&gt;
== Followup ==&lt;br /&gt;
This study is close to la tersmu predicate logic analysis, but diverges from it in some points.&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba] culno fa lo kabri [se va&#039;u mi]&lt;br /&gt;
 &lt;br /&gt;
  kabri(c0)&lt;br /&gt;
  (va&#039;o)(ti). (ba)(). (se va&#039;u)(mi). culno(c0)&lt;br /&gt;
&lt;br /&gt;
  cy no kabri&lt;br /&gt;
  .i [va&#039;o ti] [ba ku] [se va&#039;u mi] zo&#039;u cy no culno&lt;br /&gt;
&lt;br /&gt;
Fisrt, la tersmu doesn&#039;t distinguish modification of selbri with {be} from modification of bridi with sumti-tags; both threated as modification of bridi, and scoped in order of appearance:&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba] cunlo ⟨be di&#039;a⟩ fa lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
  kabri(c0)&lt;br /&gt;
  (va&#039;o)(ti). (ba)(). (di&#039;a)() (se va&#039;u)(mi). culno(c0)&lt;br /&gt;
&lt;br /&gt;
  cy no kabri&lt;br /&gt;
  .i [va&#039;o ti] [ba ku] ⟨di&#039;a ku⟩ [se va&#039;u mi] zo&#039;u cy no culno&lt;br /&gt;
&lt;br /&gt;
{jai}-conversion, on the other hand, scopes last, after all other modification, but still modifies the whole bridi:&lt;br /&gt;
&lt;br /&gt;
  ⟨ma⟩ [va&#039;o ti] [ba] ⟨jai gau⟩ cunlo ⟨be di&#039;a⟩ fai lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
  kabri(c0)&lt;br /&gt;
  ? x1. (va&#039;o)(ti). (ba)(). (di&#039;a)(). (se va&#039;u)(mi). (gau)(x1). cunlo(c0)&lt;br /&gt;
&lt;br /&gt;
  cy no kabri&lt;br /&gt;
  .i ma goi ko&#039;a [va&#039;o ti] [ba ku] ⟨di&#039;a ku⟩ [se va&#039;u mi] ⟨gau ko&#039;a⟩ zo&#039;u cy no culno&lt;br /&gt;
&lt;br /&gt;
Compare with my analysis:&lt;br /&gt;
&lt;br /&gt;
                 [va&#039;o ti] [ba ku] [se va&#039;u mi] (⟨di&#039;a ku⟩ ⟨gau ma⟩ culno) fa lo kabri&lt;br /&gt;
&lt;br /&gt;
Second, there is slight difference in analysis of {na}: if it scopes last, la tersmu doesn&#039;t place it in prenex:&lt;br /&gt;
&lt;br /&gt;
  na ku va&#039;o ti broda&lt;br /&gt;
&lt;br /&gt;
  !(va&#039;o)(ti). broda( )&lt;br /&gt;
&lt;br /&gt;
  na ku va&#039;o ti zo&#039;u broda&lt;br /&gt;
&lt;br /&gt;
but:&lt;br /&gt;
&lt;br /&gt;
 va&#039;o ti na ku broda&lt;br /&gt;
&lt;br /&gt;
 (va&#039;o)(ti). !broda( )&lt;br /&gt;
&lt;br /&gt;
 va&#039;o ti zo&#039;u na ku broda&lt;br /&gt;
&lt;br /&gt;
Finally, la tersmu doesn&#039;t handle scopes of connectives:&lt;br /&gt;
&lt;br /&gt;
  mi [na] (sipta&#039;i) je (gleki)&lt;br /&gt;
&lt;br /&gt;
  !&amp;lt;sipta&#039;i(_)){je}&amp;lt;gleki(_)&amp;gt;(mi)&lt;br /&gt;
&lt;br /&gt;
  [na ku] mi (ke sipta&#039;i ke&#039;e) je (ke gleki ke&#039;e)&lt;br /&gt;
&lt;br /&gt;
gives same result as:&lt;br /&gt;
&lt;br /&gt;
  mi (sipta&#039;i) je (gleki) naku&lt;br /&gt;
&lt;br /&gt;
  !&amp;lt;sipta&#039;i(_)){je}&amp;lt;gleki(_)&amp;gt;(mi)&lt;br /&gt;
&lt;br /&gt;
  [na ku] mi (ke sipta&#039;i ke&#039;e) je (ke gleki ke&#039;e)&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=121175</id>
		<title>User:Ramcinfo/sumti staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=121175"/>
		<updated>2016-08-27T20:16:03Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(Please note that this draft requires at least passing knowledge of both Kēlen, a beautiful verbless conlang, and Lojban. Author hopes to write more in-depth introduction in future.)&lt;br /&gt;
&lt;br /&gt;
Imitating Kēlen in Lojban seems at first to be impossible, or at least, very awkward - after all, Lojban is built upon predicates, and predicates are often thought of as verbs (and adjectives). Most sumti, being descriptions, have a predicate in heart. On the other hand, if we consider simple descriptions of {lo broda} kind sort of atomic noun-like constructs, and look at Kēlen relationals as predicates, the task seems to be trivial. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
First, note that grammar of Lojban allows fragments - predicate-less constructions which can pe used at the same level as usual statements. Original semantics of fragments is to be short answers to various king of questions (“Who Did You Pass On The Road? Nobody”), but in general the grammar doesn&#039;t define semantics, and fragments are used by Lojbanists in various roles, e.g. in poetry. One kind of fragment is a bare terms sequence. We&#039;ll take the simplest term fragment, then, and interpret it as analogue of LA relational in it simplest pattern ([http://www.terjemar.net/relats2.php#la]):&lt;br /&gt;
&lt;br /&gt;
  lo kabri&lt;br /&gt;
  la jacēla;&lt;br /&gt;
  &amp;quot;A bowl exists.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Let us skip locatives for a moment and look at the other two patterns. Doesn&#039;t them remind you of anything? But of course!&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo xunre&lt;br /&gt;
  la jacēla ñe janēla;&lt;br /&gt;
  &amp;quot;The bowl is the red thing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lo ka xunre po&#039;e lo kabri&lt;br /&gt;
  &amp;quot;The redness belongs to the bowl.&amp;quot;&lt;br /&gt;
  la jacēla pa annēla;&lt;br /&gt;
  &amp;quot;The bowl has redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The equivalence pattern translation is very straighforward. The whole-part relationship is more complex; first note that {{vlapoi|ka}} abstraction take place of Kēlen&#039;s stative inflection. Also, relationship is reversed in Lojban, the main sumti being possessed and relative one, possessor. However, if we replace possession with association, the order could be made the same as in Kēlen:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo ka xunre&lt;br /&gt;
  &amp;quot;The bowl is associated with the redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s return to the locative. By another quirk of the grammar, relative phrases could be not just sumti, but tagged terms. And lo, sumti tensed by another sumti!&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe ga&#039;u re&#039;o lo jubme&lt;br /&gt;
  la jacēla sū jatēwa;&lt;br /&gt;
  &amp;quot;The bowl is on the table.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now to the other Kēlen relationals.&lt;br /&gt;
&lt;br /&gt;
  ñi jacēla jahūwa;&lt;br /&gt;
  &amp;quot;The bowl is broken&amp;quot; or &amp;quot;The bowl broke.&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Simplest way of expressing change ([http://www.terjemar.net/relats2.php#ni]) I can think of is temporal tense. Now, pedantically, in Lojban tenses used as sumti tcita generally take {{vlapoi|nu}}-abstractons:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe co&#039;a lo za&#039;i spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be in broken state&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, maybe it could be idiomatically simplified (though motivation here is mostly to imitate Kēlen more closely):&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u co&#039;a lo spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be broken thing&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, it is difficult to express agency in this way as easily as it is done in Kēlen.&lt;br /&gt;
&lt;br /&gt;
  ñalla jacēla jahūwa;&lt;br /&gt;
  &amp;quot;I broke the bowl.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Agency is naturally expressed in lojban with {{vlapoi|gau}}, which is modal formed from predicate {{vlapoi|gasnu}} - so note that we now introduce another way to use predicates in this staile, besides simple descriptions. One approach is add another relative phrase:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe  co&#039;a lo za&#039;i spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken state, and this state is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- but note that here second association is with the abstraction (state itself), and not with its beginning. Maybe it is more fitting to move the event contour inside description:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken condition, and this beginning is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Or in identity pattern:&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is starting-to-be-broken thing, which is associated with me as agent.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, in doing so, we moved dangerously close to have full-flanged predicate in relative phrase :)&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e gau mi co&#039;a spofu&lt;br /&gt;
  &amp;quot;The bowl is associated with me causing beginning of broken condition.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Kēlen ⟨ā⟩ and ⟨tō⟩ correspond to {{vlapoi|zu&#039;e }} and {{vlapoi|bai}}:&lt;br /&gt;
&lt;br /&gt;
  lo bisli po&#039;u lo runme pe zu&#039;e la solri&lt;br /&gt;
  ñamma    anēlki    ankehāri     ā malō;&lt;br /&gt;
  &amp;quot;The Sun melted the ice.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lo bisli po&#039;u lo runme pe bai lo glanejni&lt;br /&gt;
  ñi anēlki ankehāri tō ancālli;&lt;br /&gt;
  &amp;quot;The heat melted the ice.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, I cannot yet see the unified way to translate transaction relational ([http://www.terjemar.net/relats2.php#se]). For purely physical transaction, spatial tenses could be used, but in other types of transaction it would be too metaphorical for Lojban. The only approach I see now is to use various modals, which have two downsides: 1) for various kinds of transactions, various modals are used; and 2) in most typical cases, modal is reduplicated. E.g.:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe va&#039;u mi zi&#039;e pe seva&#039;u ko&#039;a&lt;br /&gt;
  telme antēnni pē&lt;br /&gt;
  &amp;quot;I gave him some money.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Here, {{vlapoi|va&#039;u}} ({{vlapoi|xamgu}} modal) is used in place of {{vlapoi|dunda}}. Both sides of transaction represent the places of the same predicate, so its modal must be repeated two times in separate relative phrases.&lt;br /&gt;
&lt;br /&gt;
One could point that using {{vlapoi|xamgu}} for both sides of this kind of transaction is not very appropriate, as though x2 of xamgu is indeed one receiving the benefit, x1 is not source of the benefit, but the benefit itself. So, {lo jdini pe gau mi zi&#039;e pe seva&#039;u ko&#039;a} might be more fitting. This argument shows yet another problem with this approach: connecting source and destination of transaction with {{vlapoi|zi&#039;e}} creates no direct semantic link between them - in this case, the more direct translation should be &amp;quot;The money have me as agent and him as beneficiary&amp;quot;, but it must be inferred that my agency is indeed the benifit of another person. This could be amended for in the same way as with NI relational:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe seva&#039;u ko&#039;a pe gau mi&lt;br /&gt;
&lt;br /&gt;
However, this variant has a problem of {pe gau mi} associating with {ko&#039;a} and not with the whole term. Another way is to use modal connective:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe ko&#039;a [ju&#039;]e va&#039;u bo mi&lt;br /&gt;
&lt;br /&gt;
or a  forethought termset:&lt;br /&gt;
&lt;br /&gt;
 lo jdini pe nu&#039;i gau mi seva&#039;u ko&#039;a&lt;br /&gt;
&lt;br /&gt;
Of course, this is bordering on awkward way to say {lo jdini pe lo nu gau mi xamgu ko&#039;a}.&lt;br /&gt;
&lt;br /&gt;
Finally, PA relational([http://www.terjemar.net/relats2.php#pa]) is mostly shorthand for possessive pattern of LA, as noted in Kēlen grammar itself. It has additional meaning allowing abstractions to be possessors; but in Lojban it may be just expressed with (admittedly vague) {{vlapoi|pe}}:&lt;br /&gt;
&lt;br /&gt;
  lo (ka/za&#039;i)badri pe ko&#039;a&lt;br /&gt;
  - or -&lt;br /&gt;
  ko&#039;a po lo (ka/za&#039;i) badri&lt;br /&gt;
  pa anlōrāl sāen;&lt;br /&gt;
  &amp;quot;She is grieving.&amp;quot; (Lit: &amp;quot;Grief has her.&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=121146</id>
		<title>User:Ramcinfo/sumti staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=121146"/>
		<updated>2016-08-14T20:56:13Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: termset variant of transaction relational&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(Please note that this draft requires at least passing knowledge of both Kēlen, a beautiful verbless conlang, and Lojban. Author hopes to write more in-depth introduction in future.)&lt;br /&gt;
&lt;br /&gt;
Imitating Kēlen in Lojban seems at first to be impossible, or at least, very awkward - after all, Lojban is built upon predicates, and predicates are often thought of as verbs (and adjectives). Most sumti, being descriptions, have a predicate in heart. On the other hand, if we consider simple descriptions of {lo broda} kind sort of atomic noun-like constructs, and look at Kēlen relationals as predicates, the task seems to be trivial. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
First, note that grammar of Lojban allows fragments - predicate-less constructions which can pe used at the same level as usual statements. Original semantics of fragments is to be short answers to various king of questions (“Who Did You Pass On The Road? Nobody”), but in general the grammar doesn&#039;t define semantics, and fragments are used by Lojbanists in various roles, e.g. in poetry. One kind of fragment is a bare terms sequence. We&#039;ll take the simplest term fragment, then, and interpret it as analogue of LA relational in it simplest pattern ([http://www.terjemar.net/relats2.php#la]):&lt;br /&gt;
&lt;br /&gt;
  lo kabri&lt;br /&gt;
  la jacēla;&lt;br /&gt;
  &amp;quot;A bowl exists.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Let us skip locatives for a moment and look at the other two patterns. Doesn&#039;t them remind you of anything? But of course!&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo xunre&lt;br /&gt;
  la jacēla ñe janēla;&lt;br /&gt;
  &amp;quot;The bowl is the red thing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lo ka xunre po&#039;e lo kabri&lt;br /&gt;
  &amp;quot;The redness belongs to the bowl.&amp;quot;&lt;br /&gt;
  la jacēla pa annēla;&lt;br /&gt;
  &amp;quot;The bowl has redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The equivalence pattern translation is very straighforward. The whole-part relationship is more complex; first note that {{vlapoi|ka}} abstraction take place of Kēlen&#039;s stative inflection. Also, relationship is reversed in Lojban, the main sumti being possessed and relative one, possessor. However, if we replace possession with association, the order could be made the same as in Kēlen:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo ka xunre&lt;br /&gt;
  &amp;quot;The bowl is associated with the redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s return to the locative. By another quirk of the grammar, relative phrases could be not just sumti, but tagged terms. And lo, sumti tensed by another sumti!&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe ga&#039;u re&#039;o lo jubme&lt;br /&gt;
  la jacēla sū jatēwa;&lt;br /&gt;
  &amp;quot;The bowl is on the table.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now to the other Kēlen relationals.&lt;br /&gt;
&lt;br /&gt;
  ñi jacēla jahūwa;&lt;br /&gt;
  &amp;quot;The bowl is broken&amp;quot; or &amp;quot;The bowl broke.&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Simplest way of expressing change ([http://www.terjemar.net/relats2.php#ni]) I can think of is temporal tense. Now, pedantically, in Lojban tenses used as sumti tcita generally take {{vlapoi|nu}}-abstractons:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe co&#039;a lo za&#039;i spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be in broken state&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, maybe it could be idiomatically simplified (though motivation here is mostly to imitate Kēlen more closely):&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u co&#039;a lo spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be broken thing&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, it is difficult to express agency in this way as easily as it is done in Kēlen.&lt;br /&gt;
&lt;br /&gt;
  ñalla jacēla jahūwa;&lt;br /&gt;
  &amp;quot;I broke the bowl.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Agency is naturally expressed in lojban with {{vlapoi|gau}}, which is modal formed from predicate {{vlapoi|gasnu}} - so note that we now introduce another way to use predicates in this staile, besides simple descriptions. One approach is add another relative phrase:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe  co&#039;a lo za&#039;i spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken state, and this state is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- but note that here second association is with the abstraction (state itself), and not with its beginning. Maybe it is more fitting to move the event contour inside description:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken condition, and this beginning is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Or in identity pattern:&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is starting-to-be-broken thing, which is associated with me as agent.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, in doing so, we moved dangerously close to have full-flanged predicate in relative phrase :)&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e gau mi co&#039;a spofu&lt;br /&gt;
  &amp;quot;The bowl is associated with me causing beginning of broken condition.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Kēlen ⟨ā⟩ and ⟨tō⟩ correspond to {{vlapoi|zu&#039;e }} and {{vlapoi|bai}}:&lt;br /&gt;
&lt;br /&gt;
  lo bisli po&#039;u lo runme pe zu&#039;e la solri&lt;br /&gt;
  ñamma    anēlki    ankehāri     ā malō;&lt;br /&gt;
  &amp;quot;The Sun melted the ice.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lo bisli po&#039;u lo runme pe bai lo glanejni&lt;br /&gt;
  ñi anēlki ankehāri tō ancālli;&lt;br /&gt;
  &amp;quot;The heat melted the ice.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, I cannot yet see the unified way to translate transaction relational ([http://www.terjemar.net/relats2.php#se]). For purely physical transaction, spatial tenses could be used, but in other types of transaction it would be too metaphorical for Lojban. The only approach I see now is to use various modals, which have two downsides: 1) for various kinds of transactions, various modals are used; and 2) in most typical cases, modal is reduplicated. E.g.:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe va&#039;u mi zi&#039;e pe seva&#039;u ko&#039;a&lt;br /&gt;
  telme antēnni pē&lt;br /&gt;
  &amp;quot;I gave him some money.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Here, {{vlapoi|va&#039;u}} ({{vlapoi|xamgu}} modal) is used in place of {{vlapoi|dunda}}. Both sides of transaction represent the places of the same predicate, so its modal must be repeated two times in separate relative phrases.&lt;br /&gt;
&lt;br /&gt;
Another way to state the same is to connect not two relative phrases with {{vlapoi|zi&#039;e}}, but two terms inside one relative phrase with forethought termset:&lt;br /&gt;
&lt;br /&gt;
 lo jdini pe nu&#039;i va&#039;u mi seva&#039;u ko&#039;a&lt;br /&gt;
&lt;br /&gt;
One could point that using {{vlapoi|xamgu}} for both sides of this kind of transaction is not very appropriate, as though x2 of xamgu is indeed one receiving the benefit, x1 is not source of the benefit, but the benefit itself. So, {lo jdini pe gau mi zi&#039;e pe seva&#039;u ko&#039;a} might be more fitting. This argument shows yet another problem with this approach: connecting source and destination of transaction with {{vlapoi|zi&#039;e}} creates no direct semantic link between them - in this case, the more direct translation should be &amp;quot;The money have me as agent and him as beneficiary&amp;quot;, but it must be inferred that my agency is indeed the benifit of another person. This could be amended for in the same way as with NI relational:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe seva&#039;u ko&#039;a pe gau mi&lt;br /&gt;
&lt;br /&gt;
However, this variant has a problem of {pe gau mi} associating with {ko&#039;a} and not with the whole term. Another way is to use modal connective:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe ko&#039;a [ju&#039;]e va&#039;u bo mi&lt;br /&gt;
&lt;br /&gt;
Of course, this is bordering on awkward way to say {lo jdini pe lo nu mi xamgu ko&#039;a}.&lt;br /&gt;
&lt;br /&gt;
Finally, PA relational([http://www.terjemar.net/relats2.php#pa]) is mostly shorthand for possessive pattern of LA, as noted in Kēlen grammar itself. It has additional meaning allowing abstractions to be possessors; but in Lojban it may be just expressed with (admittedly vague) {{vlapoi|pe}}:&lt;br /&gt;
&lt;br /&gt;
  lo (ka/za&#039;i)badri pe ko&#039;a&lt;br /&gt;
  - or -&lt;br /&gt;
  ko&#039;a po lo (ka/za&#039;i) badri&lt;br /&gt;
  pa anlōrāl sāen;&lt;br /&gt;
  &amp;quot;She is grieving.&amp;quot; (Lit: &amp;quot;Grief has her.&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=121110</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=121110"/>
		<updated>2016-07-15T10:35:37Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Comparison with Ross Ogilvie&amp;#039;s system */ Mr. Ogilvie removed the essay from his site (http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/), but it is archived on github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Or with {emna}:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; se.emna &#039;&#039;&#039;be&#039;&#039;&#039; la &#039;&#039;fancu&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; se.emna la &#039;&#039;fancu&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; se.emna la &#039;&#039;fancu&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; se.emna la &#039;&#039;fancu&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;https://github.com/RossOgilvie/essays/blob/master/fancu%20bridi%20mekso.html&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile/fancu bridi mekso comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| return value || no special notation&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;, ce&#039;u, ke&#039;a  || ce&#039;au&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| variable binding || ce&#039;ai&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || zo&#039;ai&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ce&#039;ai} is also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi (definition) to sumti (first-class function value) || lo ka || xau&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ni}, {du&#039;u} and {su&#039;u} are also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi to sumti (result of function application) || lo kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ce&#039;u) / lo&#039;oi&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ke&#039;a) || also {xau}&lt;br /&gt;
|-&lt;br /&gt;
| convert function selbri to sumti (using functions as arguments) || me&#039;ei&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| convert function sumti to selbri || me&#039;au&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || me&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || be&#039;ei&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || fancyjo&#039;e&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis.&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || na&#039;u&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; {la jalge} is used for an bound variable argument intended as a return value, but that&#039;s pure convention. In Ramcinfo&#039;s approach, any bound variable of selbri could be used as argument or return value as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; Experimental&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; Proposed or re-purposed specially for use in these systems&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=120809</id>
		<title>User:Ramcinfo/lojbo staile liste</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=120809"/>
		<updated>2016-06-01T07:16:04Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Inspired by fictional languages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Principal purpose of this list is to explore ways to use Lojban different from Indo-European natlang ways.&lt;br /&gt;
==Lojban-specific==&lt;br /&gt;
* cmavo-only style&amp;lt;ref&amp;gt;[http://www.lojban.org/tiki/tiki-view_forum_thread.php?forumId=5&amp;amp;comments_parentId=7703&amp;amp;topics_offset=324&amp;amp;topics_sort_mode=lastPost_desc Lojban with only cmavo: an Oulipian strategy]&amp;lt;/ref&amp;gt;. Could be done in many ways; by using pro-sumti and pro-bridi; by extracting selbri from BAI (now this is easier with {{jvs|xo&#039;i}}) and tenses; by using detailed attitudinals, etc.&lt;br /&gt;
==Inspired by real language features==&lt;br /&gt;
* {{vlapoi|sumcau|staile}}, inspired by nounless languages like that of Salishan and Wakashan families&amp;lt;ref&amp;gt;[https://www.dropbox.com/s/kvj63dtew6hs3z3/ENG%20Davidson%2CM.%20-%20Studies%20in%20southern%20Wakashan%20%28Nootkan%29%20grammar.pdf?dl=0 A grammar of Nootkah]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Lojban#Syntax_and_semantics Example of Lojban imitating Nuu-chah-nulth] (near the end of the section). Note that it is also agglutinative.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
==Inspired by other constructed languages==&lt;br /&gt;
* Verbless style inspired by Kēlen&amp;lt;ref&amp;gt;[http://www.terjemar.net/grammar.php  Kēlen Grammar]&amp;lt;/ref&amp;gt;. See [[User:Ramcinfo/sumti_staile|the draft]].&lt;br /&gt;
* toki pona style, with e.g. anaphora instead of nested constructs ({mi pinxe lo tcati .i mi masno lonu go&#039;i}). Vocabulary might or might not be restricted.&lt;br /&gt;
==Inspired by fictional languages==&lt;br /&gt;
* Tlön styles, from Borges’ short story. Most Tlön languages lack nouns, so sumti are either avoided or thought of as combinations of properties and/or relations. {{jvs|za&#039;a}} and {{jvs|si&#039;au}} evidentials are common.&lt;br /&gt;
:* snanu .utloine staile: in Southern Tlön style, meaning is constructed from verbs and adverbs. Example:&lt;br /&gt;
{{mu|mo&#039;i ga&#039;u ku ti&#039;a lo zu&#039;o ru&#039;i flecu cu co&#039;a mluni}}&lt;br /&gt;
:* berti .utloine staile: in Northern Tlön style, objects are referred to by combination of adjectives (qualities). Possible lojbanic ways to do so: {{jvs|ka}} and {{jvs|za&#039;i}} abstractions, modals making main level bridi into such abstractions (especially {{vlapoi|se|kai|ku}} and {{vlapoi|se|ri&#039;i|ku}}, also {{vlapoi|se|ci&#039;o|ku}} and {{vlapoi|se|mu&#039;u|ku}}), {{vlapoi|ca&#039;o|nai}} and {{vlapoi|co&#039;i|nai}} event contours, {{jvs|ru&#039;i}} and {{jvs|ze&#039;e}} interval properties. Example:&lt;br /&gt;
{{mu|se kai vacri je gusni ne&#039;i lo kai&#039;u narju je kandi je tsani}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{notci|Note: I am tempted to replace {lo zu&#039;o} and {lo kai&#039;u} with something other in these examples, to completely avoid references to (non-abstract) objects. One way to do so is to use modal connectives, e.g {mo&#039;i ga&#039;u co&#039;a mluni .i ti&#039;a bo ru&#039;i flecu} and {se kai vacri je gunsi .i ne&#039;i bo se kai narju je kandi je tsani}, but they are more removed from the word order of original.}}&lt;br /&gt;
* melaxoxengron staile, inspired by “language of dreams” in Max Frei novels. Similar to (especially Northern) Tlön style; default evidential is {{jvs|si&#039;au}}, {{jvs|se&#039;o}} may also be used.&lt;br /&gt;
&lt;br /&gt;
==Inspired by programming languages==&lt;br /&gt;
* {{vlapoi|minde|sampla|staile}}, corresponding to imperative programming paradigm. Instead of claims, predicates are understood as commands.  Some attempts are done here: [[Writing algorithms in Lojban]].&lt;br /&gt;
* {{vlapoi|fancu|sampla|staile}}, corresponding to functional -&amp;quot;- -&amp;quot;- . Selbri understood as functions. See [[User:Ramcinfo/fancu_staile|the draft]].&lt;br /&gt;
* {{vlapoi|logji|sampla|staile}}, corresponding to logical -&amp;quot;- -&amp;quot;- . Early draft is [[User:Ramcinfo/logji_staile|here]]. See also la jimpe&amp;lt;ref&amp;gt;http://web.mit.edu/~rspeer/Public/jimpe.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* {{vlapoi|tinsa|tectaipe|staile}}, corresponding to strict typing.&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* Stack staile, based on proglangs like Forth and PostScript and conlangs like [[Fith]] and Nalnuàntir&amp;lt;ref&amp;gt;http://conlang.wikia.com/wiki/Nalnu%C3%A0ntir&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Improvements of mekso, e.g. fancu bridi mekso proposal&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt;&lt;br /&gt;
=Credits=&lt;br /&gt;
Many ideas were proposed by [[la gleki]].&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=120808</id>
		<title>User:Ramcinfo/lojbo staile liste</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=120808"/>
		<updated>2016-06-01T06:41:12Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Principal purpose of this list is to explore ways to use Lojban different from Indo-European natlang ways.&lt;br /&gt;
==Lojban-specific==&lt;br /&gt;
* cmavo-only style&amp;lt;ref&amp;gt;[http://www.lojban.org/tiki/tiki-view_forum_thread.php?forumId=5&amp;amp;comments_parentId=7703&amp;amp;topics_offset=324&amp;amp;topics_sort_mode=lastPost_desc Lojban with only cmavo: an Oulipian strategy]&amp;lt;/ref&amp;gt;. Could be done in many ways; by using pro-sumti and pro-bridi; by extracting selbri from BAI (now this is easier with {{jvs|xo&#039;i}}) and tenses; by using detailed attitudinals, etc.&lt;br /&gt;
==Inspired by real language features==&lt;br /&gt;
* {{vlapoi|sumcau|staile}}, inspired by nounless languages like that of Salishan and Wakashan families&amp;lt;ref&amp;gt;[https://www.dropbox.com/s/kvj63dtew6hs3z3/ENG%20Davidson%2CM.%20-%20Studies%20in%20southern%20Wakashan%20%28Nootkan%29%20grammar.pdf?dl=0 A grammar of Nootkah]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Lojban#Syntax_and_semantics Example of Lojban imitating Nuu-chah-nulth] (near the end of the section). Note that it is also agglutinative.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
==Inspired by other constructed languages==&lt;br /&gt;
* Verbless style inspired by Kēlen&amp;lt;ref&amp;gt;[http://www.terjemar.net/grammar.php  Kēlen Grammar]&amp;lt;/ref&amp;gt;. See [[User:Ramcinfo/sumti_staile|the draft]].&lt;br /&gt;
* toki pona style, with e.g. anaphora instead of nested constructs ({mi pinxe lo tcati .i mi masno lonu go&#039;i}). Vocabulary might or might not be restricted.&lt;br /&gt;
==Inspired by fictional languages==&lt;br /&gt;
* Tlön styles, from Borges’ short story. Most Tlön languages lack nouns, so sumti are either avoided or thought of as combinations of properties and/or relations. {{jvs|za&#039;a}} and {{jvs|si&#039;au}} evidentials are common.&lt;br /&gt;
:* snanu .utloine staile: in Southern Tlön style, meaning is constructed from verbs and adverbs. Example:&lt;br /&gt;
{{mu|mo&#039;i ga&#039;u ku ti&#039;a lo zu&#039;o ru&#039;i flecu cu co&#039;a mluni}}&lt;br /&gt;
:* berti .utloine staile: in Northern Tlön style, objects are referred to by combination of adjectives (qualities). Possible lojbanic ways to do so: {{jvs|ka}} and {{jvs|za&#039;i}} abstractions, modals making main level bridi into such abstractions (especially {{vlapoi|se|kai|ku}} and {{vlapoi|se|ri&#039;i|ku}}, also {{vlapoi|se|ci&#039;o|ku}} and {{vlapoi|se|mu&#039;u|ku}}), {{vlapoi|ca&#039;o|nai}} and {{vlapoi|co&#039;i|nai}} event contours, {{jvs|ru&#039;i}} and {{jvs|ze&#039;e}} interval properties. Example:&lt;br /&gt;
{{mu|se kai vacri je gusni ne&#039;i lo kai&#039;u narju je kandi je tsani}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{notci|Note: I am tempted to replace {lo zu&#039;o} and {lo kai&#039;u} with something other in these examples, to completely avoid references to (non-abstract) objects.}}&lt;br /&gt;
* melaxoxengron staile, inspired by “language of dreams” in Max Frei novels. Similar to (especially Northern) Tlön style; default evidential is {{jvs|si&#039;au}}, {{jvs|se&#039;o}} may also be used.&lt;br /&gt;
&lt;br /&gt;
==Inspired by programming languages==&lt;br /&gt;
* {{vlapoi|minde|sampla|staile}}, corresponding to imperative programming paradigm. Instead of claims, predicates are understood as commands.  Some attempts are done here: [[Writing algorithms in Lojban]].&lt;br /&gt;
* {{vlapoi|fancu|sampla|staile}}, corresponding to functional -&amp;quot;- -&amp;quot;- . Selbri understood as functions. See [[User:Ramcinfo/fancu_staile|the draft]].&lt;br /&gt;
* {{vlapoi|logji|sampla|staile}}, corresponding to logical -&amp;quot;- -&amp;quot;- . Early draft is [[User:Ramcinfo/logji_staile|here]]. See also la jimpe&amp;lt;ref&amp;gt;http://web.mit.edu/~rspeer/Public/jimpe.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* {{vlapoi|tinsa|tectaipe|staile}}, corresponding to strict typing.&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* Stack staile, based on proglangs like Forth and PostScript and conlangs like [[Fith]] and Nalnuàntir&amp;lt;ref&amp;gt;http://conlang.wikia.com/wiki/Nalnu%C3%A0ntir&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Improvements of mekso, e.g. fancu bridi mekso proposal&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt;&lt;br /&gt;
=Credits=&lt;br /&gt;
Many ideas were proposed by [[la gleki]].&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=119428</id>
		<title>User:Ramcinfo/lojbo staile liste</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=119428"/>
		<updated>2016-03-11T05:20:07Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: Modals inversions corrected&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Principal purpose of this list is to explore ways to use Lojban different from Indo-European natlang ways.&lt;br /&gt;
==Lojban-specific==&lt;br /&gt;
* cmavo-only style&amp;lt;ref&amp;gt;[http://www.lojban.org/tiki/tiki-view_forum_thread.php?forumId=5&amp;amp;comments_parentId=7703&amp;amp;topics_offset=324&amp;amp;topics_sort_mode=lastPost_desc Lojban with only cmavo: an Oulipian strategy]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Inspired by real language features==&lt;br /&gt;
* {{vlapoi|sumcau|staile}}, inspired by nounless languages like that of Salishan and Wakashan families&amp;lt;ref&amp;gt;[https://www.dropbox.com/s/kvj63dtew6hs3z3/ENG%20Davidson%2CM.%20-%20Studies%20in%20southern%20Wakashan%20%28Nootkan%29%20grammar.pdf?dl=0 A grammar of Nootkah]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Lojban#Syntax_and_semantics Example of Lojban imitating Nuu-chah-nulth] (near the end of the section). Note that it is also agglutinative.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
==Inspired by other constructed languages==&lt;br /&gt;
* Verbless style inspired by Kēlen&amp;lt;ref&amp;gt;[http://www.terjemar.net/grammar.php  Kēlen Grammar]&amp;lt;/ref&amp;gt;. See [[User:Ramcinfo/sumti_staile|the draft]].&lt;br /&gt;
* toki pona style, with e.g. anaphora instead of nested constructs ({mi pinxe lo tcati .i mi masno lonu go&#039;i}). Vocabulary might or might not be restricted.&lt;br /&gt;
==Inspired by fictional languages==&lt;br /&gt;
* Tlön styles, from Borges’ short story. Most Tlön languages lack nouns, so sumti are either avoided or thought of as combinations of properties and/or relations. {{jvs|za&#039;a}} and {{jvs|si&#039;au}} evidentials are common.&lt;br /&gt;
:* snanu .utloine staile: in Southern Tlön style, meaning is constructed from verbs and adverbs. Example:&lt;br /&gt;
{{mu|mo&#039;i ga&#039;u ku ti&#039;a lo zu&#039;o ru&#039;i flecu cu co&#039;a mluni}}&lt;br /&gt;
:* berti .utloine staile: in Northern Tlön style, objects are referred to by combination of adjectives (qualities). Possible lojbanic ways to do so: {{jvs|ka}} and {{jvs|za&#039;i}} abstractions, modals making main level bridi into such abstractions (especially {{vlapoi|se|kai|ku}} and {{vlapoi|se|ri&#039;i|ku}}, also {{vlapoi|se|ci&#039;o|ku}} and {{vlapoi|se|mu&#039;u|ku}}), {{vlapoi|ca&#039;o|nai}} and {{vlapoi|co&#039;i|nai}} event contours, {{jvs|ru&#039;i}} and {{jvs|ze&#039;e}} interval properties. Example:&lt;br /&gt;
{{mu|se kai vacri je gusni ne&#039;i lo kai&#039;u narju je kandi je tsani}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{notci|Note: I am tempted to replace {lo zu&#039;o} and {lo kai&#039;u} with something other in these examples, to completely avoid references to (non-abstract) objects.}}&lt;br /&gt;
* melaxoxengron staile, inspired by “language of dreams” in Max Frei novels. Similar to (especially Northern) Tlön style; default evidential is {{jvs|si&#039;au}}, {{jvs|se&#039;o}} may also be used.&lt;br /&gt;
&lt;br /&gt;
==Inspired by programming languages==&lt;br /&gt;
* {{vlapoi|minde|sampla|staile}}, corresponding to imperative programming paradigm. Instead of claims, predicates are understood as commands.  Some attempts are done here: [[Writing algorithms in Lojban]].&lt;br /&gt;
* {{vlapoi|fancu|sampla|staile}}, corresponding to functional -&amp;quot;- -&amp;quot;- . Selbri understood as functions. See [[User:Ramcinfo/fancu_staile|the draft]].&lt;br /&gt;
* {{vlapoi|logji|sampla|staile}}, corresponding to logical -&amp;quot;- -&amp;quot;- . Early draft is [[User:Ramcinfo/logji_staile|here]]. See also la jimpe&amp;lt;ref&amp;gt;http://web.mit.edu/~rspeer/Public/jimpe.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* {{vlapoi|tinsa|tectaipe|staile}}, corresponding to strict typing.&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* Stack staile, based on proglangs like Forth and PostScript and conlangs like [[Fith]] and Nalnuàntir&amp;lt;ref&amp;gt;http://conlang.wikia.com/wiki/Nalnu%C3%A0ntir&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Improvements of mekso, e.g. fancu bridi mekso proposal&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt;&lt;br /&gt;
=Credits=&lt;br /&gt;
Many ideas were proposed by [[la gleki]].&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=Lojban_etymology&amp;diff=119412</id>
		<title>Lojban etymology</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=Lojban_etymology&amp;diff=119412"/>
		<updated>2016-03-10T05:02:53Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.lojban.org/publications/etymology/ This directory] contains various Lojban etymology files, some of which are in a format suitable for analysis by the GLOTTO software written by [mailto:jguy@trl.oz.au Jacques Guy]. Includes:&lt;br /&gt;
*http://www.lojban.org/publications/etymology/lojban.voc A list of Lojban gismu in no particular order; the other *.voc files contain the same words in each of the six Lojban source languages. Note that the source-language words are in Lojbanized spelling rather than conventional spelling, which makes them hard to recognize. Furthermore, conventional endings have been chopped off, and affricates (&amp;quot;tc&amp;quot;, &amp;quot;dj&amp;quot;, &amp;quot;ts&amp;quot;, &amp;quot;dz&amp;quot;) have generally been reduced to simple spirants (&amp;quot;c&amp;quot;, &amp;quot;j&amp;quot;, &amp;quot;s&amp;quot;, &amp;quot;z&amp;quot; respectively), to prevent bogus mismatches. Thus, for example, the Spanish word &amp;quot;hijo&amp;quot; appears as &amp;quot;ix&amp;quot;.&lt;br /&gt;
*http://www.lojban.org/publications/etymology/lojban.icg The same data, but merged into a single file. The order of words in this file is the same as that in the *.voc files, but the words have been brought together. For each word, the languages are listed in the order Lojban-Chinese-English-Hindi-Spanish-Russian-Arabic. Each word is preceded by the letter &amp;quot;L&amp;quot; if it is Lojban or contributed (score &amp;gt; 0) to the Lojban gismu, or else by the first letter of its language name (&amp;quot;C&amp;quot;, &amp;quot;E&amp;quot;, &amp;quot;H&amp;quot;, &amp;quot;S&amp;quot;, &amp;quot;R&amp;quot;, or &amp;quot;A&amp;quot;) if it made no contribution (score = 0).&lt;br /&gt;
*http://www.lojban.org/publications/etymology/etysample.txt Contains sample etymologies for a few gismu, and may be used to get the flavor of Lojban etymologizing.&lt;br /&gt;
*http://www.lojban.org/publications/etymology/langstat.94 and http://www.lojban.org/publications/etymology/langstat.95 Reports on the numbers of speakers of various world languages, as of 1994 and 1995. Earlier versions of this data were used to make weighting decisions in gismu construction.&lt;br /&gt;
*http://www.lojban.org/publications/etymology/eaton.zip Old Eaton data from an earlier stage of the Loglan Project. Primarily of historical interest, it was an attempt at covering all of the words in Helen Eaton&#039;s 1930&#039;s list of the most frequently used concepts in 4 European languages. A low priority project is to replace this work with updated Lojban words for each concept.&lt;br /&gt;
&lt;br /&gt;
All of this data was drawn from the file [http://www.lojban.org/publications/etymology/finprims.html finprims], which contains complete information (with transliterated/transcribed original-language forms) on the Lojban gismu (primitive roots). &lt;br /&gt;
&lt;br /&gt;
The original-language representations exist only in hardcopy form, but Mublin has been able to reconstruct most of them, with only a few uncertain or missing etymologies. See [https://www.dealloc.org/~mublin/ Mublin&#039;s site] (the site is offline, backup can be found here: [https://github.com/cjolowicz/lojban-etymology]).&lt;br /&gt;
&lt;br /&gt;
Contact [mailto:lojban@lojban.org lojban@lojban.org] for further information.&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=119411</id>
		<title>User:Ramcinfo/sumti staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=119411"/>
		<updated>2016-03-10T01:53:20Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(Please note that this draft requires at least passing knowledge of both Kēlen, a beautiful verbless conlang, and Lojban. Author hopes to write more in-depth introduction in future.)&lt;br /&gt;
&lt;br /&gt;
Imitating Kēlen in Lojban seems at first to be impossible, or at least, very awkward - after all, Lojban is built upon predicates, and predicates are often thought of as verbs (and adjectives). Most sumti, being descriptions, have a predicate in heart. On the other hand, if we consider simple descriptions of {lo broda} kind sort of atomic noun-like constructs, and look at Kēlen relationals as predicates, the task seems to be trivial. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
First, note that grammar of Lojban allows fragments - predicate-less constructions which can pe used at the same level as usual statements. Original semantics of fragments is to be short answers to various king of questions (“Who Did You Pass On The Road? Nobody”), but in general the grammar doesn&#039;t define semantics, and fragments are used by Lojbanists in various roles, e.g. in poetry. One kind of fragment is a bare terms sequence. We&#039;ll take the simplest term fragment, then, and interpret it as analogue of LA relational in it simplest pattern ([http://www.terjemar.net/relats2.php#la]):&lt;br /&gt;
&lt;br /&gt;
  lo kabri&lt;br /&gt;
  la jacēla;&lt;br /&gt;
  &amp;quot;A bowl exists.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Let us skip locatives for a moment and look at the other two patterns. Doesn&#039;t them remind you of anything? But of course!&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo xunre&lt;br /&gt;
  la jacēla ñe janēla;&lt;br /&gt;
  &amp;quot;The bowl is the red thing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lo ka xunre po&#039;e lo kabri&lt;br /&gt;
  &amp;quot;The redness belongs to the bowl.&amp;quot;&lt;br /&gt;
  la jacēla pa annēla;&lt;br /&gt;
  &amp;quot;The bowl has redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The equivalence pattern translation is very straighforward. The whole-part relationship is more complex; first note that {{vlapoi|ka}} abstraction take place of Kēlen&#039;s stative inflection. Also, relationship is reversed in Lojban, the main sumti being possessed and relative one, possessor. However, if we replace possession with association, the order could be made the same as in Kēlen:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo ka xunre&lt;br /&gt;
  &amp;quot;The bowl is associated with the redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s return to the locative. By another quirk of the grammar, relative phrases could be not just sumti, but tagged terms. And lo, sumti tensed by another sumti!&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe ga&#039;u re&#039;o lo jubme&lt;br /&gt;
  la jacēla sū jatēwa;&lt;br /&gt;
  &amp;quot;The bowl is on the table.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now to the other Kēlen relationals.&lt;br /&gt;
&lt;br /&gt;
  ñi jacēla jahūwa;&lt;br /&gt;
  &amp;quot;The bowl is broken&amp;quot; or &amp;quot;The bowl broke.&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Simplest way of expressing change ([http://www.terjemar.net/relats2.php#ni]) I can think of is temporal tense. Now, pedantically, in Lojban tenses used as sumti tcita generally take {{vlapoi|nu}}-abstractons:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe co&#039;a lo za&#039;i spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be in broken state&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, maybe it could be idiomatically simplified (though motivation here is mostly to imitate Kēlen more closely):&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u co&#039;a lo spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be broken thing&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, it is difficult to express agency in this way as easily as it is done in Kēlen.&lt;br /&gt;
&lt;br /&gt;
  ñalla jacēla jahūwa;&lt;br /&gt;
  &amp;quot;I broke the bowl.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Agency is naturally expressed in lojban with {{vlapoi|gau}}, which is modal formed from predicate {{vlapoi|gasnu}} - so note that we now introduce another way to use predicates in this staile, besides simple descriptions. One approach is add another relative phrase:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe  co&#039;a lo za&#039;i spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken state, and this state is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- but note that here second association is with the abstraction (state itself), and not with its beginning. Maybe it is more fitting to move the event contour inside description:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken condition, and this beginning is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Or in identity pattern:&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is starting-to-be-broken thing, which is associated with me as agent.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, in doing so, we moved dangerously close to have full-flanged predicate in relative phrase :)&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e gau mi co&#039;a spofu&lt;br /&gt;
  &amp;quot;The bowl is associated with me causing beginning of broken condition.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Kēlen ⟨ā⟩ and ⟨tō⟩ correspond to {{vlapoi|zu&#039;e }} and {{vlapoi|bai}}:&lt;br /&gt;
&lt;br /&gt;
  lo bisli po&#039;u lo runme pe zu&#039;e la solri&lt;br /&gt;
  ñamma    anēlki    ankehāri     ā malō;&lt;br /&gt;
  &amp;quot;The Sun melted the ice.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lo bisli po&#039;u lo runme pe bai lo glanejni&lt;br /&gt;
  ñi anēlki ankehāri tō ancālli;&lt;br /&gt;
  &amp;quot;The heat melted the ice.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, I cannot yet see the unified way to translate transaction relational ([http://www.terjemar.net/relats2.php#se]). For purely physical transaction, spatial tenses could be used, but in other types of transaction it would be too metaphorical for Lojban. The only approach I see now is to use various modals, which have two downsides: 1) for various kinds of transactions, various modals are used; and 2) in most typical cases, modal is reduplicated. E.g.:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe va&#039;u mi zi&#039;e pe seva&#039;u ko&#039;a&lt;br /&gt;
  telme antēnni pē&lt;br /&gt;
  &amp;quot;I gave him some money.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Here, {{vlapoi|va&#039;u}} ({{vlapoi|xamgu}} modal) is used in place of {{vlapoi|dunda}}. Both sides of transaction represent the places of the same predicate, so its modal must be repeated two times in separate relative phrases.&lt;br /&gt;
&lt;br /&gt;
One could point that using {{vlapoi|xamgu}} for both sides of this kind of transaction is not very appropriate, as though x2 of xamgu is indeed one receiving the benefit, x1 is not source of the benefit, but the benefit itself. So, {lo jdini pe gau mi zi&#039;e pe seva&#039;u ko&#039;a} might be more fitting. This argument shows yet another problem with this approach: connecting source and destination of transaction with {{vlapoi|zi&#039;e}} creates no direct semantic link between them - in this case, the more direct translation should be &amp;quot;The money have me as agent and him as beneficiary&amp;quot;, but it must be inferred that my agency is indeed the benifit of another person. This could be amended for in the same way as with NI relational:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe seva&#039;u ko&#039;a pe gau mi&lt;br /&gt;
&lt;br /&gt;
However, this variant has a problem of {pe gau mi} associating with {ko&#039;a} and not with the whole term. Another way is to use modal connective:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe ko&#039;a [ju&#039;]e va&#039;u bo mi&lt;br /&gt;
&lt;br /&gt;
Of course, this is bordering on awkward way to say {lo jdini pe lo nu mi xamgu ko&#039;a}.&lt;br /&gt;
&lt;br /&gt;
Finally, PA relational([http://www.terjemar.net/relats2.php#pa]) is mostly shorthand for possessive pattern of LA, as noted in Kēlen grammar itself. It has additional meaning allowing abstractions to be possessors; but in Lojban it may be just expressed with (admittedly vague) {{vlapoi|pe}}:&lt;br /&gt;
&lt;br /&gt;
  lo (ka/za&#039;i)badri pe ko&#039;a&lt;br /&gt;
  - or -&lt;br /&gt;
  ko&#039;a po lo (ka/za&#039;i) badri&lt;br /&gt;
  pa anlōrāl sāen;&lt;br /&gt;
  &amp;quot;She is grieving.&amp;quot; (Lit: &amp;quot;Grief has her.&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=119402</id>
		<title>User:Ramcinfo/sumti staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=119402"/>
		<updated>2016-03-09T15:39:06Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(Please note that this draft requires at least passing knowledge of both Kēlen, a beautiful verbless conlang, and Lojban. Author hopes to write more in-depth introduction in future.)&lt;br /&gt;
&lt;br /&gt;
Imitating Kēlen in Lojban seems at first to be impossible, or at least, very awkward - after all, Lojban is built upon predicates, and predicates are often thought of as verbs (and adjectives). Most sumti, being descriptions, have a predicate in heart. On the other hand, if we consider simple descriptions of {lo broda} kind sort of atomic noun-like constructs, and look at Kēlen relationals as predicates, the task seems to be trivial. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
First, note that grammar of Lojban allows fragments - predicate-less constructions which can pe used at the same level as usual statements. Original semantics of fragments is to be short answers to various king of questions (“Who Did You Pass On The Road? Nobody”), but in general the grammar doesn&#039;t define semantics, and fragments are used by Lojbanists in various roles, e.g. in poetry. One kind of fragment is a bare terms sequence. We&#039;ll take the simplest term fragment, then, and interpret it as analogue of LA relational in it simplest pattern ([http://www.terjemar.net/relats2.php#la]):&lt;br /&gt;
&lt;br /&gt;
  lo kabri&lt;br /&gt;
  la jacēla;&lt;br /&gt;
  &amp;quot;A bowl exists.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Let us skip locatives for a moment and look at the other two patterns. Doesn&#039;t them remind you of anything? But of course!&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo xunre&lt;br /&gt;
  la jacēla ñe janēla;&lt;br /&gt;
  &amp;quot;The bowl is the red thing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lo ka xunre po&#039;e lo kabri&lt;br /&gt;
  &amp;quot;The redness belongs to the bowl.&amp;quot;&lt;br /&gt;
  la jacēla pa annēla;&lt;br /&gt;
  &amp;quot;The bowl has redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The equivalence pattern translation is very straighforward. The whole-part relationship is more complex; first note that {{vlapoi|ka}} abstraction take place of Kēlen&#039;s stative inflection. Also, relationship is reversed in Lojban, the main sumti being possessed and relative one, possessor. However, if we replace possession with association, the order could be made the same as in Kēlen:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo ka xunre&lt;br /&gt;
  &amp;quot;The bowl is associated with the redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s return to the locative. By another quirk of the grammar, relative phrases could be not just sumti, but tagged terms. And lo, sumti tensed by another sumti!&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe ga&#039;u re&#039;o lo jubme&lt;br /&gt;
  la jacēla sū jatēwa;&lt;br /&gt;
  &amp;quot;The bowl is on the table.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now to the other Kēlen relationals.&lt;br /&gt;
&lt;br /&gt;
  ñi jacēla jahūwa;&lt;br /&gt;
  &amp;quot;The bowl is broken&amp;quot; or &amp;quot;The bowl broke.&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Simplest way of expressing change ([http://www.terjemar.net/relats2.php#ni]) I can think of is temporal tense. Now, pedantically, in Lojban tenses used as sumti tcita generally take {{vlapoi|nu}}-abstractons:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe co&#039;a lo za&#039;i spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be in broken state&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, maybe it could be idiomatically simplified (though motivation here is mostly to imitate Kēlen more closely):&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u co&#039;a lo spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be broken thing&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, it is difficult to express agency in this way as easily as it is done in Kēlen.&lt;br /&gt;
&lt;br /&gt;
  ñalla jacēla jahūwa;&lt;br /&gt;
  &amp;quot;I broke the bowl.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Agency is naturally expressed in lojban with {{vlapoi|gau}}, which is modal formed from predicate {{vlapoi|gasnu}} - so note that we now introduce another way to use predicates in this staile, besides simple descriptions. One approach is add another relative phrase:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe  co&#039;a lo za&#039;i spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken state, and this state is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- but note that here second association is with the abstraction (state itself), and not with its beginning. Maybe it is more fitting to move the event contour inside description:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken condition, and this beginning is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Or in identity pattern:&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is starting-to-be-broken thing, which is associated with me as agent.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, in doing so, we moved dangerously close to have full-flanged predicate in relative phrase :)&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e gau mi co&#039;a spofu&lt;br /&gt;
  &amp;quot;The bowl is associated with me causing beginning of broken condition.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Kēlen ⟨ā⟩ and ⟨tō⟩ correspond to {{vlapoi|zu&#039;e }} and {{vlapoi|bai}}:&lt;br /&gt;
&lt;br /&gt;
  lo bisli po&#039;u lo runme pe zu&#039;e la solri&lt;br /&gt;
  ñamma    anēlki    ankehāri     ā malō;&lt;br /&gt;
  &amp;quot;The Sun melted the ice.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lo bisli po&#039;u lo runme pe bai lo glanejni&lt;br /&gt;
  ñi anēlki ankehāri tō ancālli;&lt;br /&gt;
  &amp;quot;The heat melted the ice.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, I cannot yet see the unified way to translate transaction relational ([http://www.terjemar.net/relats2.php#se]). For purely physical transaction, spatial tenses could be used, but in other types of transaction it would be too metaphorical for Lojban. The only approach I see now is to use various modals, which have two downsides: 1) for various kinds of transactions, various modals are used; and 2) in most typical cases, modal is reduplicated. E.g.:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe va&#039;u mi zi&#039;e pe seva&#039;u ko&#039;a&lt;br /&gt;
  telme antēnni pē&lt;br /&gt;
  &amp;quot;I gave him some money.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Here, {{vlapoi|va&#039;u}} ({{vlapoi|xamgu}} modal) is used in place of {{vlapoi|dunda}}. Both sides of transaction represent the places of the same predicate, so its modal must be repeated two times in separate relative phrases.&lt;br /&gt;
&lt;br /&gt;
One could point that using {{vlapoi|xamgu}} for both sides of this kind of transaction is not very appropriate, as though x2 of xamgu is indeed one receiving the benefit, x1 is not source of the benefit, but the benefit itself. So, {lo jdini pe gau mi zi&#039;e pe seva&#039;u ko&#039;a} might be more fitting. This argument shows yet another problem with this approach: connecting source and destination of transaction with {{vlapoi|zi&#039;e}} creates no direct semantic link between them - in this case, the more direct translation should be &amp;quot;The money have me as agent and him as beneficiary&amp;quot;, but it must be inferred that my agency is indeed the benifit of another person. This could be amended for in the same way as with NI relational:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe seva&#039;u ko&#039;a pe gau mi&lt;br /&gt;
&lt;br /&gt;
However, this variant has a problem of {pe gau mi} associating with {ko&#039;a} and not with the whole term, so perfect translation still not reached.&lt;br /&gt;
&lt;br /&gt;
Finally, PA relational([http://www.terjemar.net/relats2.php#pa]) is mostly shorthand for possessive pattern of LA, as noted in Kēlen grammar itself. It has additional meaning allowing abstractions to be possessors; but in Lojban it may be just expressed with (admittedly vague) {{vlapoi|pe}}:&lt;br /&gt;
&lt;br /&gt;
  lo (ka/za&#039;i)badri pe ko&#039;a&lt;br /&gt;
  - or -&lt;br /&gt;
  ko&#039;a po lo (ka/za&#039;i) badri&lt;br /&gt;
  pa anlōrāl sāen;&lt;br /&gt;
  &amp;quot;She is grieving.&amp;quot; (Lit: &amp;quot;Grief has her.&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=119401</id>
		<title>User:Ramcinfo/sumti staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=119401"/>
		<updated>2016-03-09T13:57:11Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(Please note that this draft requires at least passing knowledge of both Kēlen, a beautiful verbless conlang, and Lojban. Author hopes to write more in-depth introduction in future.)&lt;br /&gt;
&lt;br /&gt;
Imitating Kēlen in Lojban seems at first to be impossible, or at least, very awkward - after all, Lojban is built upon predicates, and predicates are often thought of as verbs (and adjectives). Most sumti, being descriptions, have a predicate in heart. On the other hand, if we consider simple descriptions of {lo broda} kind sort of atomic noun-like constructs, and look at Kēlen relationals as predicates, the task seems to be trivial. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
First, note that grammar of Lojban allows fragments - predicate-less constructions which can pe used at the same level as usual statements. Original semantics of fragments is to be short answers to various king of questions (“Who Did You Pass On The Road? Nobody”), but in general the grammar doesn&#039;t define semantics, and fragments are used by Lojbanists in various roles, e.g. in poetry. One kind of fragment is a bare terms sequence. We&#039;ll take the simplest term fragment, then, and interpret it as analogue of LA relational in it simplest pattern ([http://www.terjemar.net/relats2.php#la]):&lt;br /&gt;
&lt;br /&gt;
  lo kabri&lt;br /&gt;
  la jacēla;&lt;br /&gt;
  &amp;quot;A bowl exists.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Let us skip locatives for a moment and look at the other two patterns. Doesn&#039;t them remind you of anything? But of course!&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo xunre&lt;br /&gt;
  la jacēla ñe janēla;&lt;br /&gt;
  &amp;quot;The bowl is the red thing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lo ka xunre po&#039;e lo kabri&lt;br /&gt;
  &amp;quot;The redness belongs to the bowl.&amp;quot;&lt;br /&gt;
  la jacēla pa annēla;&lt;br /&gt;
  &amp;quot;The bowl has redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The equivalence pattern translation is very straighforward. The whole-part relationship is more complex; first note that {{vlapoi|ka}} abstraction take place of Kēlen&#039;s stative inflection. Also, relationship is reversed in Lojban, the main sumti being possessed and relative one, possessor. However, if we replace possession with association, the order could be made the same as in Kēlen:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo ka xunre&lt;br /&gt;
  &amp;quot;The bowl is associated with the redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s return to the locative. By another quirk of the grammar, relative phrases could be not just sumti, but tagged terms. And lo, sumti tensed by another sumti!&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe ga&#039;u re&#039;o lo jubme&lt;br /&gt;
  la jacēla sū jatēwa;&lt;br /&gt;
  &amp;quot;The bowl is on the table.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now to the other Kēlen relationals.&lt;br /&gt;
&lt;br /&gt;
  ñi jacēla jahūwa;&lt;br /&gt;
  &amp;quot;The bowl is broken&amp;quot; or &amp;quot;The bowl broke.&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Simplest way of expressing change ([http://www.terjemar.net/relats2.php#ni]) I can think of is temporal tense. Now, pedantically, in Lojban tenses used as sumti tcita generally take {{vlapoi|nu}}-abstractons:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe co&#039;a lo za&#039;i spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be in broken state&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, maybe it could be idiomatically simplified (though motivation here is mostly to imitate Kēlen more closely):&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u co&#039;a lo spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be broken thing&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, it is difficult to express agency in this way as easily as it is done in Kēlen.&lt;br /&gt;
&lt;br /&gt;
  ñalla jacēla jahūwa;&lt;br /&gt;
  &amp;quot;I broke the bowl.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Agency is naturally expressed in lojban with {{vlapoi|gau}}, which is modal formed from predicate {{vlapoi|gasnu}} - so note that we now introduce another way to use predicates in this staile, besides simple descriptions. One approach is add another relative phrase:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe  co&#039;a lo za&#039;i spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken state, and this state is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- but note that here second association is with the abstraction (state itself), and not with its beginning. Maybe it is more fitting to move the event contour inside description:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken condition, and this beginning is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Or in identity pattern:&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is starting-to-be-broken thing, which is associated with me as agent.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, in doing so, we moved dangerously close to have full-flanged predicate in relative phrase :)&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e gau mi co&#039;a spofu&lt;br /&gt;
  &amp;quot;The bowl is associated with me causing beginning of broken condition.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, I cannot yet see the unified way to translate transaction relational ([http://www.terjemar.net/relats2.php#se]). For purely physical transaction, spatial tenses could be used, but in other types of transaction it would be too metaphorical for Lojban. The only approach I see now is to use various modals, which have two downsides: 1) for various kinds of transactions, various modals are used; and 2) in most typical cases, modal is reduplicated. E.g.:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe va&#039;u mi zi&#039;e pe seva&#039;u ko&#039;a&lt;br /&gt;
  telme antēnni pē&lt;br /&gt;
  &amp;quot;I gave him some money.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Here, {{vlapoi|va&#039;u}} ({{vlapoi|xamgu}} modal) is used in place of {{vlapoi|dunda}}. Both sides of transaction represent the places of the same predicate, so its modal must be repeated two times in separate relative phrases.&lt;br /&gt;
&lt;br /&gt;
One could point that using {{vlapoi|xamgu}} for both sides of this kind of transaction is not very appropriate, as though x2 of xamgu is indeed one receiving the benefit, x1 is not source of the benefit, but the benefit itself. So, {lo jdini pe gau mi zi&#039;e pe seva&#039;u ko&#039;a} might be more fitting. This argument shows yet another problem with this approach: connecting source and destination of transaction with {{vlapoi|zi&#039;e}} creates no direct semantic link between them - in this case, the more direct translation should be &amp;quot;The money have me as agent and him as beneficiary&amp;quot;, but it must be inferred that my agency is indeed the benifit of another person. This could be amended for in the same way as with NI relational:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe seva&#039;u ko&#039;a pe gau mi&lt;br /&gt;
&lt;br /&gt;
However, this variant has a problem of {pe gau mi} associating with {ko&#039;a} and not with the whole term, so perfect translation still not reached.&lt;br /&gt;
&lt;br /&gt;
Finally, PA relational([http://www.terjemar.net/relats2.php#pa]) is mostly shorthand for possessive pattern of LA, as noted in Kēlen grammar itself. It has additional meaning allowing abstractions to be possessors; but in Lojban it may be just expressed with (admittedly vague) {{vlapoi|pe}}:&lt;br /&gt;
&lt;br /&gt;
  lo (ka/za&#039;i)badri pe ko&#039;a&lt;br /&gt;
  - or -&lt;br /&gt;
  ko&#039;a po lo (ka/za&#039;i) badri&lt;br /&gt;
  pa anlōrāl sāen;&lt;br /&gt;
  &amp;quot;She is grieving.&amp;quot; (Lit: &amp;quot;Grief has her.&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=119400</id>
		<title>User:Ramcinfo/sumti staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=119400"/>
		<updated>2016-03-09T13:27:42Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(Please note that this draft requires at least passing knowledge of both Kēlen, a beautiful verbless conlang, and Lojban. Author hopes to write more in-depth introduction in future.)&lt;br /&gt;
&lt;br /&gt;
Imitating Kēlen in Lojban seems at first to be impossible, or at least, very awkward - after all, Lojban is built upon predicates, and predicates are often thought of as verbs (and adjectives). Most sumti, being descriptions, have a predicate in heart. On the other hand, if we consider simple descriptions of {lo broda} kind sort of atomic noun-like constructs, and look at Kēlen relationals as predicates, the task seems to be trivial. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
First, note that grammar of Lojban allows fragments - predicate-less constructions which can pe used at the same level as usual statements. Original semantics of fragments is to be short answers to various king of questions (“Who Did You Pass On The Road? Nobody”), but in general the grammar doesn&#039;t define semantics, and fragments are used by Lojbanists in various roles, e.g. in poetry. One kind of fragment is a bare terms sequence. We&#039;ll take the simplest term fragment, then, and interpret it as analogue of LA relational in it simplest pattern ([http://www.terjemar.net/relats2.php#la]):&lt;br /&gt;
&lt;br /&gt;
  lo kabri&lt;br /&gt;
  la jacēla;&lt;br /&gt;
  &amp;quot;A bowl exists.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Let us skip locatives for a moment and look at the other two patterns. Doesn&#039;t them remind you of anything? But of course!&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo xunre&lt;br /&gt;
  la jacēla ñe janēla;&lt;br /&gt;
  &amp;quot;The bowl is the red thing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lo ka xunre po&#039;e lo kabri&lt;br /&gt;
  &amp;quot;The redness is belongs to the bowl.&amp;quot;&lt;br /&gt;
  la jacēla pa annēla;&lt;br /&gt;
  &amp;quot;The bowl has redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The equivalence pattern translation is very straighforward. The whole-part relationship is more complex; first note that {{vlapoi|ka}} abstraction take place of Kēlen&#039;s stative inflection. Also, relationship is reversed in Lojban, the main sumti being possessed and relative one, possessor. However, if we replace possession with association, the order could be made the same as in Kēlen:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo ka xunre&lt;br /&gt;
  &amp;quot;The bowl is associated with the redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s return to the locative. By another quirk of the grammar, relative phrases could be not just sumti, but tagged terms. And lo, sumti tensed by another sumti!&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe ga&#039;u re&#039;o lo jubme&lt;br /&gt;
  la jacēla sū jatēwa;&lt;br /&gt;
  &amp;quot;The bowl is on the table.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now to the other Kēlen relationals.&lt;br /&gt;
&lt;br /&gt;
  ñi jacēla jahūwa;&lt;br /&gt;
  &amp;quot;The bowl is broken&amp;quot; or &amp;quot;The bowl broke.&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Simplest way of expressing change ([http://www.terjemar.net/relats2.php#ni]) I can think of is temporal tense. Now, pedantically, in Lojban tenses used as sumti tcita generally take {{vlapoi|nu}}-abstractons:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe co&#039;a lo za&#039;i spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be in broken state&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, maybe it could be idiomatically simplified (though motivation here is mostly to imitate Kēlen more closely):&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u co&#039;a lo spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be broken thing&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, it is difficult to express agency in this way as easily as it is done in Kēlen.&lt;br /&gt;
&lt;br /&gt;
  ñalla jacēla jahūwa;&lt;br /&gt;
  &amp;quot;I broke the bowl.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Agency is naturally expressed in lojban with {{vlapoi|gau}}, which is modal formed from predicate {{vlapoi|gasnu}} - so note that we now introduce another way to use predicates in this staile, besides simple descriptions. One approach is add another relative phrase:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe  co&#039;a lo za&#039;i spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken state, and this state is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- but note that here second association is with the abstraction (state itself), and not with its beginning. Maybe it is more fitting to move the event contour inside description:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken condition, and this beginning is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Or in identity pattern:&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is starting-to-be-broken thing, which is associated with me as agent.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, in doing so, we moved dangerously close to have full-flanged predicate in relative phrase :)&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e gau mi co&#039;a spofu&lt;br /&gt;
  &amp;quot;The bowl is associated with me causing beginning of broken condition.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, I cannot yet see the unified way to translate transaction relational ([http://www.terjemar.net/relats2.php#se]). For purely physical transaction, spatial tenses could be used, but in other types of transaction it would be too metaphorical for Lojban. The only approach I see now is to use various modals, which have two downsides: 1) for various kinds of transactions, various modals are used; and 2) in most typical cases, modal is reduplicated. E.g.:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe va&#039;u mi zi&#039;e pe seva&#039;u ko&#039;a&lt;br /&gt;
  telme antēnni pē&lt;br /&gt;
  &amp;quot;I gave him some money.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Here, {{vlapoi|va&#039;u}} ({{vlapoi|xamgu}} modal) is used in place of {{vlapoi|dunda}}. Both sides of transaction represent the places of the same predicate, so its modal must be repeated two times in separate relative phrases.&lt;br /&gt;
&lt;br /&gt;
One could point that using {{vlapoi|xamgu}} for both sides of this kind of transaction is not very appropriate, as though x2 of xamgu is indeed one receiving the benefit, x1 is not source of the benefit, but the benefit itself. So, {lo jdini pe gau mi zi&#039;e pe seva&#039;u ko&#039;a} might be more fitting. This argument shows yet another problem with this approach: connecting source and destination of transaction with {{vlapoi|zi&#039;e}} creates no direct semantic link between them - in this case, the more direct translation should be &amp;quot;The money have me as agent and him as beneficiary&amp;quot;, but it must be inferred that my agency is indeed the benifit of another person. This could be amended for in the same way as with NI relational:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe seva&#039;u ko&#039;a pe gau mi&lt;br /&gt;
&lt;br /&gt;
However, this variant has a problem of {pe gau mi} associating with {ko&#039;a} and not with the whole term, so perfect translation still not reached.&lt;br /&gt;
&lt;br /&gt;
Finally, PA relational([http://www.terjemar.net/relats2.php#pa]) is mostly shorthand for possessive pattern of LA, as noted in Kēlen grammar itself. It has additional meaning allowing abstractions to be possessors; but in Lojban it may be just expressed with (admittedly vague) {{vlapoi|pe}}:&lt;br /&gt;
&lt;br /&gt;
  lo (ka/za&#039;i)badri pe ko&#039;a&lt;br /&gt;
  - or -&lt;br /&gt;
  ko&#039;a po lo (ka/za&#039;i) badri&lt;br /&gt;
  pa anlōrāl sāen;&lt;br /&gt;
  &amp;quot;She is grieving.&amp;quot; (Lit: &amp;quot;Grief has her.&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=119399</id>
		<title>User:Ramcinfo/sumti staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=119399"/>
		<updated>2016-03-09T13:24:47Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(Please note that this draft requires at least passing knowledge of both Kēlen, a beautiful verbless conlang, and Lojban. Author hopes to write more in-depth introduction in future.)&lt;br /&gt;
&lt;br /&gt;
Imitating Kēlen in Lojban seems at first to be impossible, or at least, very awkward - after all, Lojban is built upon predicates, and predicates are often thought of as verbs (and adjectives). Most sumti, being descriptions, have a predicate in heart. On the other hand, if we consider simple descriptions of {lo broda} kind sort of atomic noun-like constructs, and look at Kēlen relationals as predicates, the task seems to be trivial. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
First, note that grammar of Lojban allows fragments - predicate-less constructions which can pe used at the same level as usual statements. Original semantics of fragments is to be short answers to various king of questions (“Who Did You Pass On The Road? Nobody”), but in general the grammar doesn&#039;t define semantics, and fragments are used by Lojbanists in various roles, e.g. in poetry. One kind of fragment is a bare terms sequence. We&#039;ll take the simplest term fragment, then, and interpret it as analogue of LA connective in it simplest pattern ([http://www.terjemar.net/relats2.php#la]):&lt;br /&gt;
&lt;br /&gt;
  lo kabri&lt;br /&gt;
  la jacēla;&lt;br /&gt;
  &amp;quot;A bowl exists.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Let us skip locatives for a moment and look at the other two patterns. Doesn&#039;t them remind you of anything? But of course!&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo xunre&lt;br /&gt;
  la jacēla ñe janēla;&lt;br /&gt;
  &amp;quot;The bowl is the red thing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lo ka xunre po&#039;e lo kabri&lt;br /&gt;
  &amp;quot;The redness is belongs to the bowl.&amp;quot;&lt;br /&gt;
  la jacēla pa annēla;&lt;br /&gt;
  &amp;quot;The bowl has redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The equivalence pattern translation is very straighforward. The whole-part relationship is more complex; first note that {{vlapoi|ka}} abstraction take place of Kēlen&#039;s stative inflection. Also, relationship is reversed in Lojban, the main sumti being possessed and relative one, possessor. However, if we replace possession with association, the order could be made the same as in Kēlen:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo ka xunre&lt;br /&gt;
  &amp;quot;The bowl is associated with the redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s return to the locative. By another quirk of the grammar, relative phrases could be not just sumti, but tagged terms. And lo, sumti tensed by another sumti!&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe ga&#039;u re&#039;o lo jubme&lt;br /&gt;
  la jacēla sū jatēwa;&lt;br /&gt;
  &amp;quot;The bowl is on the table.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now to the other Kēlen connectives.&lt;br /&gt;
&lt;br /&gt;
  ñi jacēla jahūwa;&lt;br /&gt;
  &amp;quot;The bowl is broken&amp;quot; or &amp;quot;The bowl broke.&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Simplest way of expressing change ([http://www.terjemar.net/relats2.php#ni]) I can think of is temporal tense. Now, pedantically, in Lojban tenses used as sumti tcita generally take {{vlapoi|nu}}-abstractons:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe co&#039;a lo za&#039;i spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be in broken state&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, maybe it could be idiomatically simplified (though motivation here is mostly to imitate Kēlen more closely):&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u co&#039;a lo spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be broken thing&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, it is difficult to express agency in this way as easily as it is done in Kēlen.&lt;br /&gt;
&lt;br /&gt;
  ñalla jacēla jahūwa;&lt;br /&gt;
  &amp;quot;I broke the bowl.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Agency is naturally expressed in lojban with {{vlapoi|gau}}, which is modal formed from predicate {{vlapoi|gasnu}} - so note that we now introduce another way to use predicates in this staile, besides simple descriptions. One approach is add another relative phrase:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe  co&#039;a lo za&#039;i spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken state, and this state is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- but note that here second association is with the abstraction (state itself), and not with its beginning. Maybe it is more fitting to move the event contour inside description:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken condition, and this beginning is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Or in identity pattern:&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is starting-to-be-broken thing, which is associated with me as agent.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, in doing so, we moved dangerously close to have full-flanged predicate in relative phrase :)&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e gau mi co&#039;a spofu&lt;br /&gt;
  &amp;quot;The bowl is associated with me causing beginning of broken condition.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, I cannot yet see the unified way to translate transaction connective ([http://www.terjemar.net/relats2.php#se]). For purely physical transaction, spatial tenses could be used, but in other types of transaction it would be too metaphorical for Lojban. The only approach I see now is to use various modals, which have two downsides: 1) for various kinds of transactions, various modals are used; and 2) in most typical cases, modal is reduplicated. E.g.:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe va&#039;u mi zi&#039;e pe seva&#039;u ko&#039;a&lt;br /&gt;
  telme antēnni pē&lt;br /&gt;
  &amp;quot;I gave him some money.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Here, {{vlapoi|va&#039;u}} ({{vlapoi|xamgu}} modal) is used in place of {{vlapoi|dunda}}. Both sides of transaction represent the places of the same predicate, so its modal must be repeated two times in separate relative phrases.&lt;br /&gt;
&lt;br /&gt;
One could point that using {{vlapoi|xamgu}} for both sides of this kind of transaction is not very appropriate, as though x2 of xamgu is indeed one receiving the benefit, x1 is not source of the benefit, but the benefit itself. So, {lo jdini pe gau mi zi&#039;e pe seva&#039;u ko&#039;a} might be more fitting. This argument shows yet another problem with this approach: connecting source and destination of transaction with {{vlapoi|zi&#039;e}} creates no direct semantic link between them - in this case, the more direct translation should be &amp;quot;The money have me as agent and him as beneficiary&amp;quot;, but it must be inferred that my agency is indeed the benifit of another person. This could be amended for in the same way as with NI connective:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe seva&#039;u ko&#039;a pe gau mi&lt;br /&gt;
&lt;br /&gt;
However, this variant has a problem of {pe gau mi} associating with {ko&#039;a} and not with the whole term, so perfect translation still not reached.&lt;br /&gt;
&lt;br /&gt;
Finally, PA connective ([http://www.terjemar.net/relats2.php#pa]) is mostly shorthand for possessive pattern of LA, as noted in Kēlen grammar itself. It has additional meaning allowing abstractions to be possessors; but in Lojban it may be just expressed with (admittedly vague) {{vlapoi|pe}}:&lt;br /&gt;
&lt;br /&gt;
  lo (ka/za&#039;i)badri pe ko&#039;a&lt;br /&gt;
  - or -&lt;br /&gt;
  ko&#039;a po lo (ka/za&#039;i) badri&lt;br /&gt;
  pa anlōrāl sāen;&lt;br /&gt;
  &amp;quot;She is grieving.&amp;quot; (Lit: &amp;quot;Grief has her.&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=119396</id>
		<title>User:Ramcinfo/sumti staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/sumti_staile&amp;diff=119396"/>
		<updated>2016-03-09T11:48:11Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: Created page with &amp;quot;(Please note that this draft require at least passing knowledge of both Kēlen, beautiful verbless conlang, and Lojban. Author hopes to write more in-depth introduction in fut...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(Please note that this draft require at least passing knowledge of both Kēlen, beautiful verbless conlang, and Lojban. Author hopes to write more in-depth introduction in future.)&lt;br /&gt;
&lt;br /&gt;
Imitating Kēlen in Lojban seems at first to be impossible, or at least, very awkward - after all, Lojban is built upon predicates, and predicates are often thought of as verbs (and adjectives). Most sumti, being descriptions, have a predicate in heart. On the other hand, if we consider simple descriptions of {lo broda} kind sort of atomic noun-like constructs, and look at Kēlen relationals as predicates, the task seems to be trivial. However, we can do better.&lt;br /&gt;
&lt;br /&gt;
First, note that grammar of Lojban allows fragments - predicate-less constructions which can pe used at the same level as usual statements. Original semantics of fragments is to be short answers to various king of questions (“Who Did You Pass On The Road? Nobody”), but in general the grammar doesn&#039;t define semantics, and fragments are used by Lojbanists in various roles, e.g. in poetry. One kind of fragment is a bare terms sequence. We&#039;ll take the simplest term fragment, then, and interpret it as analogue of LA connective in it simplest pattern ([http://www.terjemar.net/relats2.php#la]):&lt;br /&gt;
&lt;br /&gt;
  lo kabri&lt;br /&gt;
  la jacēla;&lt;br /&gt;
  &amp;quot;A bowl exists.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Let us skip locatives for a moment and look at the other two patterns. Doesn&#039;t them remind you of anything? But of course!&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo xunre&lt;br /&gt;
  la jacēla ñe janēla;&lt;br /&gt;
  &amp;quot;The bowl is the red thing.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  lo ka xunre po&#039;e lo kabri&lt;br /&gt;
  &amp;quot;The redness is belongs to the bowl.&amp;quot;&lt;br /&gt;
  la jacēla pa annēla;&lt;br /&gt;
  &amp;quot;The bowl has redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The equivalence pattern translation is very straighforward. The whole-part relationship is more complex; first note that {{vlapoi|ka}} abstraction take place of Kēlen&#039;s stative inflection. Also, relationship is reversed in Lojban, the main sumti being possessed and relative one, possessor. However, if we replace possession with association, the order could be made the same as in Kēlen:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo ka xunre&lt;br /&gt;
  &amp;quot;The bowl is associated with the redness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s return to the locative. By another quirk of the grammar, relative phrases could be not just sumti, but tagged terms. And lo, sumti tensed by another sumti!&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe ga&#039;u re&#039;o lo jubme&lt;br /&gt;
  la jacēla sū jatēwa;&lt;br /&gt;
  &amp;quot;The bowl is on the table.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now to the other Kēlen connectives.&lt;br /&gt;
&lt;br /&gt;
  ñi jacēla jahūwa;&lt;br /&gt;
  &amp;quot;The bowl is broken&amp;quot; or &amp;quot;The bowl broke.&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
Simplest way of expressing change ([http://www.terjemar.net/relats2.php#ni]) I can think of is temporal tense. Now, pedantically, in Lojban tenses used as sumti tcita generally take {{vlapoi|nu}}-abstractons:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe co&#039;a lo za&#039;i spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be in broken state&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, maybe it could be idiomatically simplified (though motivation here is mostly to imitate Kēlen more closely):&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u co&#039;a lo spofu&lt;br /&gt;
  &amp;quot;The bowl is beginning to be broken thing&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, it is difficult to express agency in this way as easily as it is done in Kēlen.&lt;br /&gt;
&lt;br /&gt;
  ñalla jacēla jahūwa;&lt;br /&gt;
  &amp;quot;I broke the bowl.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Agency is naturally expressed in lojban with {{vlapoi|gau}}, which is modal formed from predicate {{vlapoi|gasnu}} - so note that we now introduce another way to use predicates in this staile, besides simple descriptions. One approach is add another relative phrase:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe  co&#039;a lo za&#039;i spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken state, and this state is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
- but note that here second association is with the abstraction (state itself), and not with its beginning. Maybe it is more fitting to move the event contour inside description:&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is associated with beginning of broken condition, and this beginning is associated with me as agent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Or in identity pattern:&lt;br /&gt;
&lt;br /&gt;
  lo kabri po&#039;u lo co&#039;a spofu pe gau mi&lt;br /&gt;
  &amp;quot;The bowl is starting-to-be-broken thing, which is associated with me as agent.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
However, in doing so, we moved dangerously close to have full-flanged predicate in relative phrase :)&lt;br /&gt;
&lt;br /&gt;
  lo kabri pe lo mu&#039;e gau mi co&#039;a spofu&lt;br /&gt;
  &amp;quot;The bowl is associated with me causing beginning of broken condition.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, I cannot yet see the unified way to translate transaction connective ([http://www.terjemar.net/relats2.php#se]). For purely physical transaction, spatial tenses could be used, but in other types of transaction it would be too metaphorical for Lojban. The only approach I see now is to use various modals, which have two downsides: 1) for various kinds of transactions, various modals are used; and 2) in most typical cases, modal is reduplicated. E.g.:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe va&#039;u mi zi&#039;e pe seva&#039;u ko&#039;a&lt;br /&gt;
  telme antēnni pē&lt;br /&gt;
  &amp;quot;I gave him some money.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Here, {{vlapoi|va&#039;u}} ({{vlapoi|xamgu}} modal) is used in place of {{vlapoi|dunda}}. Both sides of transaction represent the places of the same predicate, so its modal must be repeated two times in separate relative phrases.&lt;br /&gt;
&lt;br /&gt;
One could point that using {{vlapoi|xamgu}} for both sides of this kind of transaction is not very appropriate, as though x2 of xamgu is indeed one receiving the benefit, x1 is not source of the benefit, but the benefit itself. So, {lo jdini pe gau mi zi&#039;e pe seva&#039;u ko&#039;a} might be more fitting. This argument shows yet another problem with this approach: connecting source and destination of transaction with {{vlapoi|zi&#039;e}} creates no direct semantic link between them - in this case, the more direct translation should be &amp;quot;The money have me as agent and him as beneficiary&amp;quot;, but it must be inferred that my agency is indeed the benifit of another person. This could be amended for in the same way as with NI connective:&lt;br /&gt;
&lt;br /&gt;
  lo jdini pe seva&#039;u ko&#039;a pe gau mi&lt;br /&gt;
  &amp;quot;The money are for benefit of him, by my agency&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Finally, PA connective ([http://www.terjemar.net/relats2.php#pa]) is mostly shorthand for possessive pattern of LA, as noted in Kēlen grammar itself. It has additional meaning allowing abstractions to be possessors; but in Lojban it may be just expressed with (admittedly vague) {{vlapoi|pe}}:&lt;br /&gt;
&lt;br /&gt;
  lo (ka/za&#039;i)badri pe ko&#039;a&lt;br /&gt;
  - or -&lt;br /&gt;
  ko&#039;a po lo (ka/za&#039;i) badri&lt;br /&gt;
  pa anlōrāl sāen;&lt;br /&gt;
  &amp;quot;She is grieving.&amp;quot; (Lit: &amp;quot;Grief has her.&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=119395</id>
		<title>User:Ramcinfo/lojbo staile liste</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=119395"/>
		<updated>2016-03-09T09:46:41Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Principal purpose of this list is to explore ways to use Lojban different from Indo-European natlang ways.&lt;br /&gt;
==Lojban-specific==&lt;br /&gt;
* cmavo-only style&amp;lt;ref&amp;gt;[http://www.lojban.org/tiki/tiki-view_forum_thread.php?forumId=5&amp;amp;comments_parentId=7703&amp;amp;topics_offset=324&amp;amp;topics_sort_mode=lastPost_desc Lojban with only cmavo: an Oulipian strategy]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Inspired by real language features==&lt;br /&gt;
* {{vlapoi|sumcau|staile}}, inspired by nounless languages like that of Salishan and Wakashan families&amp;lt;ref&amp;gt;[https://www.dropbox.com/s/kvj63dtew6hs3z3/ENG%20Davidson%2CM.%20-%20Studies%20in%20southern%20Wakashan%20%28Nootkan%29%20grammar.pdf?dl=0 A grammar of Nootkah]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Lojban#Syntax_and_semantics Example of Lojban imitating Nuu-chah-nulth] (near the end of the section). Note that it is also agglutinative.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
==Inspired by other constructed languages==&lt;br /&gt;
* Verbless style inspired by Kēlen&amp;lt;ref&amp;gt;[http://www.terjemar.net/grammar.php  Kēlen Grammar]&amp;lt;/ref&amp;gt;. See [[User:Ramcinfo/sumti_staile|the draft]].&lt;br /&gt;
* toki pona style, with e.g. anaphora instead of nested constructs ({mi pinxe lo tcati .i mi masno lonu go&#039;i}). Vocabulary might or might not be restricted.&lt;br /&gt;
==Inspired by fictional languages==&lt;br /&gt;
* Tlön styles, from Borges’ short story. Most Tlön languages lack nouns, so sumti are either avoided or thought of as combinations of properties and/or relations. {{jvs|za&#039;a}} and {{jvs|si&#039;au}} evidentials are common.&lt;br /&gt;
:* snanu .utloine staile: in Southern Tlön style, meaning is constructed from verbs and adverbs. Example:&lt;br /&gt;
{{mu|mo&#039;i ga&#039;u ku ti&#039;a lo zu&#039;o ru&#039;i flecu cu co&#039;a mluni}}&lt;br /&gt;
:* berti .utloine staile: in Northern Tlön style, objects are referred to by combination of adjectives (qualities). Possible lojbanic ways to do so: {{jvs|ka}} and {{jvs|za&#039;i}} abstractions, modals making main level bridi into such abstractions (especially {{vlapoi|kai|ku}} and {{vlapoi|ri&#039;i|ku}}, also {{vlapoi|ci&#039;o|ku}} and {{vlapoi|mu&#039;u|ku}}), {{vlapoi|ca&#039;o|nai}} and {{vlapoi|co&#039;i|nai}} event contours, {{jvs|ru&#039;i}} and {{jvs|ze&#039;e}} interval properties. Example:&lt;br /&gt;
{{mu|kai vacri je gusni ne&#039;i lo kai&#039;u narju je kandi je tsani}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{notci|Note: I am tempted to replace {lo zu&#039;o} and {lo kai&#039;u} with something other in these examples, to completely avoid references to (non-abstract) objects.}}&lt;br /&gt;
* melaxoxengron staile, inspired by “language of dreams” in Max Frei novels. Similar to (especially Northern) Tlön style; default evidential is {{jvs|si&#039;au}}, {{jvs|se&#039;o}} may also be used.&lt;br /&gt;
==Inspired by programming languages==&lt;br /&gt;
* {{vlapoi|minde|sampla|staile}}, corresponding to imperative programming paradigm. Instead of claims, predicates are understood as commands.  Some attempts are done here: [[Writing algorithms in Lojban]].&lt;br /&gt;
* {{vlapoi|fancu|sampla|staile}}, corresponding to functional -&amp;quot;- -&amp;quot;- . Selbri understood as functions. See [[User:Ramcinfo/fancu_staile|the draft]].&lt;br /&gt;
* {{vlapoi|logji|sampla|staile}}, corresponding to logical -&amp;quot;- -&amp;quot;- . Early draft is [[User:Ramcinfo/logji_staile|here]]. See also la jimpe&amp;lt;ref&amp;gt;http://web.mit.edu/~rspeer/Public/jimpe.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* {{vlapoi|tinsa|tectaipe|staile}}, corresponding to strict typing.&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* Stack staile, based on proglangs like Forth and PostScript and conlangs like [[Fith]] and Nalnuàntir&amp;lt;ref&amp;gt;http://conlang.wikia.com/wiki/Nalnu%C3%A0ntir&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Improvements of mekso, e.g. fancu bridi mekso proposal&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt;&lt;br /&gt;
=Credits=&lt;br /&gt;
Many ideas were proposed by [[la gleki]].&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=la_vlasisku&amp;diff=117972</id>
		<title>la vlasisku</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=la_vlasisku&amp;diff=117972"/>
		<updated>2015-10-25T10:16:36Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A frontend to [[jbovlaste]] dictionary.&lt;br /&gt;
*[http://vlasisku.lojban.org/vlasisku/ English database]&lt;br /&gt;
&lt;br /&gt;
[[Category:vlaste saske]]&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/scope_study&amp;diff=117965</id>
		<title>User:Ramcinfo/scope study</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/scope_study&amp;diff=117965"/>
		<updated>2015-10-23T17:17:36Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Followup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scope operators are things that modify predications as a whole (bridi operators) or predicates (selbri operators). They are: tenses, some modals, {na} negation, outer quantifiers, and connectives. They are called scope operators because when multiple are present in the same bridi, they modify the bridi in the order based on their order in the bridi text.&lt;br /&gt;
&lt;br /&gt;
== Tenses and modals ==&lt;br /&gt;
When one operator modifies the result of another, it is said for latter to be in the scope of former.&amp;lt;ref&amp;gt;http://lojban.github.io/cll/10/13/, example 13.7&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba] culno fa lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
Linking operator to selbri with {be} allows to incorporate it into the selbri. It acts on selbri only, producing new, modified selbri, so it scopes after all other operators (and even after regular sumti, in a way).&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba] cunlo ⟨be di&#039;a⟩ fa lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
Another way to incorporate an operator into selbri is {jai}-conversion. Such a link will have scope below operators linked with {be}, if any:&lt;br /&gt;
&lt;br /&gt;
  ma [va&#039;o ti] [ba] ⟨jai gau⟩ cunlo ⟨be di&#039;a⟩ fai lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
The order of bridi operators relative to other parts of bridi (being selbri and sumti) is irrelevant. Let us move them all in front of bridi. (We&#039;re adding {ku} to {ba} to turn it into sumti tcita from selbri tcita, so it could be an independent term.)&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba ku] [se va&#039;u mi] (⟨di&#039;a ku⟩ ⟨gau ma⟩ culno) fa lo kabri&lt;br /&gt;
&lt;br /&gt;
The operators modify the meaning of the sumti in this way:&lt;br /&gt;
&lt;br /&gt;
  (va&#039;o ti (ba ku (se va&#039;u mi ((di&#039;a ku (gau ma (culno))) fa lo kabri))))&lt;br /&gt;
&lt;br /&gt;
or using composition and reverse-apply operators:&lt;br /&gt;
&lt;br /&gt;
  (va&#039;o ti ∘ ba ku ∘ se va&#039;u mi)(d&#039;a ku ∘ gau ma ∘ culno)(fa lo kabri)&lt;br /&gt;
&lt;br /&gt;
 The following happens in present context:&lt;br /&gt;
   The following happens in the future:&lt;br /&gt;
     The following happens for me:&lt;br /&gt;
       The thing is a cup&lt;br /&gt;
         This is done again:&lt;br /&gt;
           This is done by whom, I want to know.&lt;br /&gt;
             The thing is full.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be noted what a tense stating both direction and interval is one operator; and in fact such tenses give their component in order reverse to the order of operators, e.g. {puzi} is equivalent to {ziku puku}.&lt;br /&gt;
&lt;br /&gt;
== Quantifiers ==&lt;br /&gt;
&lt;br /&gt;
{na}, absent in the example above, behaves the same way, as do outer quantifiers — except the latter create {da}* variables behind the scene:&lt;br /&gt;
&lt;br /&gt;
  mi na pendo ci gerku   =&amp;gt; [na ku] [ci da poi gerku] zo&#039;u mi pendo da&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;It is not true what each of four dogs is my pet&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  mi pendo ci gerku naku =&amp;gt; [ci da poi gerku] [na ku] zo&#039;u mi pendo da&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;For each of four dogs, it is not true what it is my pet&amp;quot;&lt;br /&gt;
  (e.g. no one of four dogs is my pet)&lt;br /&gt;
&lt;br /&gt;
== Connectives ==&lt;br /&gt;
&lt;br /&gt;
Logical connectives could be reduced to outer quantifiers, but it easier to expand them to bridi connectives. For latter, scope of operator inside first connected bridi ends at the end of the bridi, before the connective:&lt;br /&gt;
&lt;br /&gt;
   (mi [na] sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I am not sleepy. And I am happy&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Scope of any operator could be extended to the connected predicates through common prenex:&lt;br /&gt;
&lt;br /&gt;
   [naku] zo&#039;u (mi sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;It is not true what (I am sleepy and I am happy)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Other connectives are expanded to bridi connectives:&lt;br /&gt;
&lt;br /&gt;
   mi [na] (sipta&#039;i) je (gleki) =&amp;gt; [na] zo&#039;u (mi sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
   mi (sipta&#039;i) je (gleki) naku =&amp;gt; (mi sipta&#039;i [naku]) .ije (mi gleki [naku])&lt;br /&gt;
&lt;br /&gt;
   mi [na] (sipta&#039;i) gi&#039;e (gleki) =&amp;gt; (mi [na] sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
   mi [naku] (sipta&#039;i) gi&#039;e (gleki) =&amp;gt; [naku] zo&#039;u (mi sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
   mi (sipta&#039;i) gi&#039;e (gleki [naku]) =&amp;gt; (mi sipta&#039;i) .ije (mi gleki [naku])&lt;br /&gt;
   mi (sipta&#039;i) gi&#039;e (gleki vau) [naku] =&amp;gt; (mi sipta&#039;i [naku]) .ije (mi gleki [naku])&lt;br /&gt;
&lt;br /&gt;
   mi .e do [na] sipta&#039;i =&amp;gt; (mi [na] sipta&#039;i) .ije (do [na] sipta&#039;i)&lt;br /&gt;
   naku mi .e do sipta&#039;i =&amp;gt; [naku] zo&#039;u (mi sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
&lt;br /&gt;
* Rewrite more clearly.&lt;br /&gt;
* Review with other Lojbanists.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Study done with the help of omni___, xorxes, Ilmen, gleki and latro`a; and maybe someone I forgot to mention — sorry, then.&lt;br /&gt;
&lt;br /&gt;
== Followup ==&lt;br /&gt;
This study is close to la tersmu predicate logic analysis, but diverges from it in some points.&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba] culno fa lo kabri [se va&#039;u mi]&lt;br /&gt;
 &lt;br /&gt;
  kabri(c0)&lt;br /&gt;
  (va&#039;o)(ti). (ba)(). (se va&#039;u)(mi). culno(c0)&lt;br /&gt;
&lt;br /&gt;
  cy no kabri&lt;br /&gt;
  .i [va&#039;o ti] [ba ku] [se va&#039;u mi] zo&#039;u cy no culno&lt;br /&gt;
&lt;br /&gt;
Fisrt, la tersmu doesn&#039;t distinguish modification of selbri with {be} from modification of bridi with sumti-tags; both threated as modification of bridi, and scoped in order of appearance:&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba] cunlo ⟨be di&#039;a⟩ fa lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
  kabri(c0)&lt;br /&gt;
  (va&#039;o)(ti). (ba)(). (di&#039;a)() (se va&#039;u)(mi). culno(c0)&lt;br /&gt;
&lt;br /&gt;
  cy no kabri&lt;br /&gt;
  .i [va&#039;o ti] [ba ku] ⟨di&#039;a ku⟩ [se va&#039;u mi] zo&#039;u cy no culno&lt;br /&gt;
&lt;br /&gt;
{jai}-conversion, on the other hand, scopes last, after all other modification, but still modifies the whole bridi:&lt;br /&gt;
&lt;br /&gt;
  ⟨ma⟩ [va&#039;o ti] [ba] ⟨jai gau⟩ cunlo ⟨be di&#039;a⟩ fai lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
  kabri(c0)&lt;br /&gt;
  ? x1. (va&#039;o)(ti). (ba)(). (di&#039;a)(). (se va&#039;u)(mi). (gau)(x1). cunlo(c0)&lt;br /&gt;
&lt;br /&gt;
  cy no kabri&lt;br /&gt;
  .i ma goi ko&#039;a [va&#039;o ti] [ba ku] ⟨di&#039;a ku⟩ [se va&#039;u mi] ⟨gau ko&#039;a⟩ zo&#039;u cy no culno&lt;br /&gt;
&lt;br /&gt;
Compare with my analysis:&lt;br /&gt;
&lt;br /&gt;
                 [va&#039;o ti] [ba ku] [se va&#039;u mi] (⟨di&#039;a ku⟩ ⟨gau ma⟩ culno) fa lo kabri&lt;br /&gt;
&lt;br /&gt;
Second, there is slight difference in analysis of {na}: if it scopes last, la tersmu doesn&#039;t place it in prenex:&lt;br /&gt;
&lt;br /&gt;
  na ku va&#039;o ti broda&lt;br /&gt;
&lt;br /&gt;
  !(va&#039;o)(ti). broda( )&lt;br /&gt;
&lt;br /&gt;
  na ku va&#039;o ti zo&#039;u broda&lt;br /&gt;
&lt;br /&gt;
but:&lt;br /&gt;
&lt;br /&gt;
 va&#039;o ti na ku broda&lt;br /&gt;
&lt;br /&gt;
 (va&#039;o)(ti). !broda( )&lt;br /&gt;
&lt;br /&gt;
 va&#039;o ti zo&#039;u na ku broda&lt;br /&gt;
&lt;br /&gt;
Finally, la tersmu doesn&#039;t handle scopes of connectives:&lt;br /&gt;
&lt;br /&gt;
  mi [na] (sipta&#039;i) je (gleki)&lt;br /&gt;
&lt;br /&gt;
  !&amp;lt;sipta&#039;i(_)){je}&amp;lt;gleki(_)&amp;gt;(mi)&lt;br /&gt;
&lt;br /&gt;
  [na ku] mi (ke sipta&#039;i ke&#039;e) je (ke gleki ke&#039;e)&lt;br /&gt;
&lt;br /&gt;
gives same result as:&lt;br /&gt;
&lt;br /&gt;
  mi (sipta&#039;i) je (gleki) naku&lt;br /&gt;
&lt;br /&gt;
  !&amp;lt;sipta&#039;i(_)){je}&amp;lt;gleki(_)&amp;gt;(mi)&lt;br /&gt;
&lt;br /&gt;
  [na ku] mi (ke sipta&#039;i ke&#039;e) je (ke gleki ke&#039;e)&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/scope_study&amp;diff=117964</id>
		<title>User:Ramcinfo/scope study</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/scope_study&amp;diff=117964"/>
		<updated>2015-10-23T17:07:13Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: la tersmu comparison&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scope operators are things that modify predications as a whole (bridi operators) or predicates (selbri operators). They are: tenses, some modals, {na} negation, outer quantifiers, and connectives. They are called scope operators because when multiple are present in the same bridi, they modify the bridi in the order based on their order in the bridi text.&lt;br /&gt;
&lt;br /&gt;
== Tenses and modals ==&lt;br /&gt;
When one operator modifies the result of another, it is said for latter to be in the scope of former.&amp;lt;ref&amp;gt;http://lojban.github.io/cll/10/13/, example 13.7&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba] culno fa lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
Linking operator to selbri with {be} allows to incorporate it into the selbri. It acts on selbri only, producing new, modified selbri, so it scopes after all other operators (and even after regular sumti, in a way).&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba] cunlo ⟨be di&#039;a⟩ fa lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
Another way to incorporate an operator into selbri is {jai}-conversion. Such a link will have scope below operators linked with {be}, if any:&lt;br /&gt;
&lt;br /&gt;
  ma [va&#039;o ti] [ba] ⟨jai gau⟩ cunlo ⟨be di&#039;a⟩ fai lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
The order of bridi operators relative to other parts of bridi (being selbri and sumti) is irrelevant. Let us move them all in front of bridi. (We&#039;re adding {ku} to {ba} to turn it into sumti tcita from selbri tcita, so it could be an independent term.)&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba ku] [se va&#039;u mi] (⟨di&#039;a ku⟩ ⟨gau ma⟩ culno) fa lo kabri&lt;br /&gt;
&lt;br /&gt;
The operators modify the meaning of the sumti in this way:&lt;br /&gt;
&lt;br /&gt;
  (va&#039;o ti (ba ku (se va&#039;u mi ((di&#039;a ku (gau ma (culno))) fa lo kabri))))&lt;br /&gt;
&lt;br /&gt;
or using composition and reverse-apply operators:&lt;br /&gt;
&lt;br /&gt;
  (va&#039;o ti ∘ ba ku ∘ se va&#039;u mi)(d&#039;a ku ∘ gau ma ∘ culno)(fa lo kabri)&lt;br /&gt;
&lt;br /&gt;
 The following happens in present context:&lt;br /&gt;
   The following happens in the future:&lt;br /&gt;
     The following happens for me:&lt;br /&gt;
       The thing is a cup&lt;br /&gt;
         This is done again:&lt;br /&gt;
           This is done by whom, I want to know.&lt;br /&gt;
             The thing is full.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It should be noted what a tense stating both direction and interval is one operator; and in fact such tenses give their component in order reverse to the order of operators, e.g. {puzi} is equivalent to {ziku puku}.&lt;br /&gt;
&lt;br /&gt;
== Quantifiers ==&lt;br /&gt;
&lt;br /&gt;
{na}, absent in the example above, behaves the same way, as do outer quantifiers — except the latter create {da}* variables behind the scene:&lt;br /&gt;
&lt;br /&gt;
  mi na pendo ci gerku   =&amp;gt; [na ku] [ci da poi gerku] zo&#039;u mi pendo da&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;It is not true what each of four dogs is my pet&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  mi pendo ci gerku naku =&amp;gt; [ci da poi gerku] [na ku] zo&#039;u mi pendo da&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;For each of four dogs, it is not true what it is my pet&amp;quot;&lt;br /&gt;
  (e.g. no one of four dogs is my pet)&lt;br /&gt;
&lt;br /&gt;
== Connectives ==&lt;br /&gt;
&lt;br /&gt;
Logical connectives could be reduced to outer quantifiers, but it easier to expand them to bridi connectives. For latter, scope of operator inside first connected bridi ends at the end of the bridi, before the connective:&lt;br /&gt;
&lt;br /&gt;
   (mi [na] sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I am not sleepy. And I am happy&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Scope of any operator could be extended to the connected predicates through common prenex:&lt;br /&gt;
&lt;br /&gt;
   [naku] zo&#039;u (mi sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;It is not true what (I am sleepy and I am happy)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Other connectives are expanded to bridi connectives:&lt;br /&gt;
&lt;br /&gt;
   mi [na] (sipta&#039;i) je (gleki) =&amp;gt; [na] zo&#039;u (mi sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
   mi (sipta&#039;i) je (gleki) naku =&amp;gt; (mi sipta&#039;i [naku]) .ije (mi gleki [naku])&lt;br /&gt;
&lt;br /&gt;
   mi [na] (sipta&#039;i) gi&#039;e (gleki) =&amp;gt; (mi [na] sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
   mi [naku] (sipta&#039;i) gi&#039;e (gleki) =&amp;gt; [naku] zo&#039;u (mi sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
   mi (sipta&#039;i) gi&#039;e (gleki [naku]) =&amp;gt; (mi sipta&#039;i) .ije (mi gleki [naku])&lt;br /&gt;
   mi (sipta&#039;i) gi&#039;e (gleki vau) [naku] =&amp;gt; (mi sipta&#039;i [naku]) .ije (mi gleki [naku])&lt;br /&gt;
&lt;br /&gt;
   mi .e do [na] sipta&#039;i =&amp;gt; (mi [na] sipta&#039;i) .ije (do [na] sipta&#039;i)&lt;br /&gt;
   naku mi .e do sipta&#039;i =&amp;gt; [naku] zo&#039;u (mi sipta&#039;i) .ije (mi gleki)&lt;br /&gt;
&lt;br /&gt;
== Todo ==&lt;br /&gt;
&lt;br /&gt;
* Rewrite more clearly.&lt;br /&gt;
* Review with other Lojbanists.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Study done with the help of omni___, xorxes, Ilmen, gleki and latro`a; and maybe someone I forgot to mention — sorry, then.&lt;br /&gt;
&lt;br /&gt;
== Followup ==&lt;br /&gt;
This study is close to la tersmu predicate logic analysis, but diverges from it in some points.&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba] culno fa lo kabri [se va&#039;u mi]&lt;br /&gt;
 &lt;br /&gt;
  kabri(c0)&lt;br /&gt;
  (va&#039;o)(ti). (ba)(). (se va&#039;u)(mi). culno(c0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  cy no kabri&lt;br /&gt;
  .i [va&#039;o ti] [ba ku] [se va&#039;u mi] zo&#039;u cy no culno&lt;br /&gt;
&lt;br /&gt;
Fisrt, la tersmu doesn&#039;t distinguish modification of selbri with {be} from modification of bridi with sumti-tags; both threated as modification of bridi, and scoped in order of appearance:&lt;br /&gt;
&lt;br /&gt;
  [va&#039;o ti] [ba] cunlo ⟨be di&#039;a⟩ fa lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
  kabri(c0)&lt;br /&gt;
  (va&#039;o)(ti). (ba)(). (di&#039;a)() (se va&#039;u)(mi). culno(c0)&lt;br /&gt;
&lt;br /&gt;
  cy no kabri&lt;br /&gt;
  .i [va&#039;o ti] [ba ku] ⟨di&#039;a ku⟩ [se va&#039;u mi] zo&#039;u cy no culno&lt;br /&gt;
&lt;br /&gt;
{jai}-conversion, on the other hand, scopes last, after all other modification, but still modifies the whole bridi:&lt;br /&gt;
&lt;br /&gt;
  ⟨ma⟩ [va&#039;o ti] [ba] ⟨jai gau⟩ cunlo ⟨be di&#039;a⟩ fai lo kabri [se va&#039;u mi]&lt;br /&gt;
&lt;br /&gt;
  kabri(c0)&lt;br /&gt;
  ? x1. (va&#039;o)(ti). (ba)(). (di&#039;a)(). (se va&#039;u)(mi). (gau)(x1). cunlo(c0)&lt;br /&gt;
&lt;br /&gt;
  cy no kabri&lt;br /&gt;
  .i ma goi ko&#039;a [va&#039;o ti] [ba ku] ⟨di&#039;a ku⟩ [se va&#039;u mi] ⟨gau ko&#039;a⟩ zo&#039;u cy no culno&lt;br /&gt;
&lt;br /&gt;
Compare with my analysis:&lt;br /&gt;
&lt;br /&gt;
                 [va&#039;o ti] [ba ku] [se va&#039;u mi] (⟨di&#039;a ku⟩ ⟨gau ma⟩ culno) fa lo kabri&lt;br /&gt;
&lt;br /&gt;
Second, there is slight difference in analysis of {na}: if it scopes last, la tersmu doesn&#039;t place it in prenex:&lt;br /&gt;
&lt;br /&gt;
  na ku va&#039;o ti broda&lt;br /&gt;
&lt;br /&gt;
  !(va&#039;o)(ti). broda( )&lt;br /&gt;
&lt;br /&gt;
  na ku va&#039;o ti zo&#039;u broda&lt;br /&gt;
&lt;br /&gt;
but:&lt;br /&gt;
&lt;br /&gt;
 va&#039;o ti na ku broda&lt;br /&gt;
&lt;br /&gt;
 (va&#039;o)(ti). !broda( )&lt;br /&gt;
&lt;br /&gt;
 va&#039;o ti zo&#039;u na ku broda&lt;br /&gt;
&lt;br /&gt;
Finally, la tersmu doesn&#039;t handle scopes of connectives:&lt;br /&gt;
&lt;br /&gt;
  mi [na] (sipta&#039;i) je (gleki)&lt;br /&gt;
&lt;br /&gt;
  !&amp;lt;sipta&#039;i(_)){je}&amp;lt;gleki(_)&amp;gt;(mi)&lt;br /&gt;
&lt;br /&gt;
  [na ku] mi (ke sipta&#039;i ke&#039;e) je (ke gleki ke&#039;e)&lt;br /&gt;
&lt;br /&gt;
gives same result as:&lt;br /&gt;
&lt;br /&gt;
  mi (sipta&#039;i) je (gleki) naku&lt;br /&gt;
&lt;br /&gt;
  !&amp;lt;sipta&#039;i(_)){je}&amp;lt;gleki(_)&amp;gt;(mi)&lt;br /&gt;
&lt;br /&gt;
  [na ku] mi (ke sipta&#039;i ke&#039;e) je (ke gleki ke&#039;e)&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117629</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117629"/>
		<updated>2015-09-21T12:24:27Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Or with {emna}:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; se.emna &#039;&#039;&#039;be&#039;&#039;&#039; la &#039;&#039;fancu&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; se.emna la &#039;&#039;fancu&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; se.emna la &#039;&#039;fancu&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; se.emna la &#039;&#039;fancu&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile/fancu bridi mekso comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| return value || no special notation&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;, ce&#039;u, ke&#039;a  || ce&#039;au&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| variable binding || ce&#039;ai&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || zo&#039;ai&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ce&#039;ai} is also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi (definition) to sumti (first-class function value) || lo ka || xau&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ni}, {du&#039;u} and {su&#039;u} are also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi to sumti (result of function application) || lo kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ce&#039;u) / lo&#039;oi&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ke&#039;a) || also {xau}&lt;br /&gt;
|-&lt;br /&gt;
| convert function selbri to sumti (using functions as arguments) || me&#039;ei&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| convert function sumti to selbri || me&#039;au&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || me&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || be&#039;ei&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || fancyjo&#039;e&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis.&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || na&#039;u&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; {la jalge} is used for an bound variable argument intended as a return value, but that&#039;s pure convention. In Ramcinfo&#039;s approach, any bound variable of selbri could be used as argument or return value as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; Experimental&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; Proposed or re-purposed specially for use in these systems&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117628</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117628"/>
		<updated>2015-09-21T12:19:17Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  la &#039;&#039;fancu&#039;&#039; cu &#039;&#039;&#039;emna&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile/fancu bridi mekso comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| return value || no special notation&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;, ce&#039;u, ke&#039;a  || ce&#039;au&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| variable binding || ce&#039;ai&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || zo&#039;ai&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ce&#039;ai} is also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi (definition) to sumti (first-class function value) || lo ka || xau&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ni}, {du&#039;u} and {su&#039;u} are also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi to sumti (result of function application) || lo kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ce&#039;u) / lo&#039;oi&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ke&#039;a) || also {xau}&lt;br /&gt;
|-&lt;br /&gt;
| convert function selbri to sumti (using functions as arguments) || me&#039;ei&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| convert function sumti to selbri || me&#039;au&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || me&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || be&#039;ei&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || fancyjo&#039;e&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis.&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || na&#039;u&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; {la jalge} is used for an bound variable argument intended as a return value, but that&#039;s pure convention. In Ramcinfo&#039;s approach, any bound variable of selbri could be used as argument or return value as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; Experimental&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; Proposed or re-purposed specially for use in these systems&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117627</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117627"/>
		<updated>2015-09-21T12:18:49Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  la &#039;&#039;fancu&#039;&#039; &#039;&#039;&#039;emna&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile/fancu bridi mekso comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| return value || no special notation&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;, ce&#039;u, ke&#039;a  || ce&#039;au&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| variable binding || ce&#039;ai&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || zo&#039;ai&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ce&#039;ai} is also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi (definition) to sumti (first-class function value) || lo ka || xau&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ni}, {du&#039;u} and {su&#039;u} are also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi to sumti (result of function application) || lo kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ce&#039;u) / lo&#039;oi&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ke&#039;a) || also {xau}&lt;br /&gt;
|-&lt;br /&gt;
| convert function selbri to sumti (using functions as arguments) || me&#039;ei&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| convert function sumti to selbri || me&#039;au&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || me&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || be&#039;ei&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || fancyjo&#039;e&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis.&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || na&#039;u&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; {la jalge} is used for an bound variable argument intended as a return value, but that&#039;s pure convention. In Ramcinfo&#039;s approach, any bound variable of selbri could be used as argument or return value as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; Experimental&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; Proposed or re-purposed specially for use in these systems&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117626</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117626"/>
		<updated>2015-09-21T09:01:14Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Comparison with Ross Ogilvie&amp;#039;s system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile/fancu bridi mekso comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| return value || no special notation&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;, ce&#039;u, ke&#039;a  || ce&#039;au&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| variable binding || ce&#039;ai&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || zo&#039;ai&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ce&#039;ai} is also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi (definition) to sumti (first-class function value) || lo ka || xau&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ni}, {du&#039;u} and {su&#039;u} are also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi to sumti (result of function application) || lo kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ce&#039;u) / lo&#039;oi&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ke&#039;a) || also {xau}&lt;br /&gt;
|-&lt;br /&gt;
| convert function selbri to sumti (using functions as arguments) || me&#039;ei&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| convert function sumti to selbri || me&#039;au&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || me&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || be&#039;ei&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || fancyjo&#039;e&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis.&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || na&#039;u&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; {la jalge} is used for an bound variable argument intended as a return value, but that&#039;s pure convention. In Ramcinfo&#039;s approach, any bound variable of selbri could be used as argument or return value as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; Experimental&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; Proposed or re-purposed specially for use in these systems&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117625</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117625"/>
		<updated>2015-09-21T00:13:02Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Comparison with Ross Ogilvie&amp;#039;s system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile/fancu bridi mekso comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| return value || no special notation&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;, ce&#039;u, ke&#039;a  || ce&#039;au&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| variable binding || ce&#039;ai&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || zo&#039;ai&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ce&#039;ai} is also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi (definition) to sumti (first-class function value) || ka || xau&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ni}, {du&#039;u} and {su&#039;u} are also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi to sumti (result of function application) || lo kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ce&#039;u) / lo&#039;oi&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ke&#039;a) || also {xau}&lt;br /&gt;
|-&lt;br /&gt;
| convert function selbri to sumti (using functions as arguments) || me&#039;ei&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| convert function sumti to selbri || me&#039;au&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || me&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || be&#039;ei&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || fancyjo&#039;e&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis.&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || na&#039;u&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; {la jalge} is used for an bound variable argument intended as a return value, but that&#039;s pure convention. In Ramcinfo&#039;s approach, any bound variable of selbri could be used as argument or return value as needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; Experimental&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; Proposed or re-purposed specially for use in these systems&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117624</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117624"/>
		<updated>2015-09-21T00:12:01Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Comparison with Ross Ogilvie&amp;#039;s system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile/fancu bridi mekso comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| return value || no special notation&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;, ce&#039;u, ke&#039;a  || ce&#039;au&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| variable binding || ce&#039;ai&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || zo&#039;ai&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ce&#039;ai} is also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi (definition) to sumti (first-class function value) || ka || xau&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; ({ni}, {du&#039;u} and {su&#039;u} are also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi to sumti (result of function application) || lo kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ce&#039;u) / lo&#039;oi&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; (ke&#039;a) || also {xau}&lt;br /&gt;
|-&lt;br /&gt;
| convert function selbri to sumti (using functions as arguments) || me&#039;ei&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| convert function sumti to selbri || me&#039;au&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || me&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; || be&#039;ei&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || fancyjo&#039;e&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis.&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || na&#039;u&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; {la jalge} is used for an bound variable argument intended as a return value, but that&#039;s pure convention. In Ramcinfo&#039;s approach, any bound variable of selbri could be used as argument or return value as needed.&lt;br /&gt;
&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt; Experimental&lt;br /&gt;
&amp;lt;sup&amp;gt;‡&amp;lt;/sup&amp;gt; Proposed or re-purposed specially for use in these systems&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117623</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117623"/>
		<updated>2015-09-21T00:09:36Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Comparison with Ross Ogilvie&amp;#039;s system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile/fancu bridi mekso comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| return value || no special notation*, ce&#039;u, ke&#039;a  || ce&#039;au‡&lt;br /&gt;
|-&lt;br /&gt;
| variable binding || ce&#039;ai† || zo&#039;ai‡ ({ce&#039;ai} is also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi (definition) to sumti (first-class function value) || ka || xau‡ ({ni}, {du&#039;u} and {su&#039;u} are also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi to sumti (result of function application) || lo kai&#039;u† (ce&#039;u) / lo&#039;oi† (ke&#039;a) || also {xau}&lt;br /&gt;
|-&lt;br /&gt;
| convert function selbri to sumti (using functions as arguments) || me&#039;ei† || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| convert function sumti to selbri || me&#039;au† || me&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u† || be&#039;ei‡&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti‡ || fancyjo&#039;e‡&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis.‡ || na&#039;u‡&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a‡&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu‡ || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji‡&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina‡&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*{la jalge} is used for an bound variable argument intended as a return value, but that&#039;s pure convention. In Ramcinfo&#039;s approach, any bound variable of selbri could be used as argument or return value as needed.&lt;br /&gt;
† Experimental&lt;br /&gt;
‡ Proposed or re-purposed specially for use in these systems&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117622</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117622"/>
		<updated>2015-09-21T00:04:11Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Comparison with Ross Ogilvie&amp;#039;s system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile/fancu bridi mekso comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| return value || no special notation*, ce&#039;u, ke&#039;a  || ce&#039;au&lt;br /&gt;
|-&lt;br /&gt;
| variable binding || ce&#039;ai || zo&#039;ai ({ce&#039;ai} is also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi (definition) to sumti (first-class function value) || ka || xau ({ni}, {du&#039;u} and {su&#039;u} are also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi to sumti (result of function application) || lo kai&#039;u (ce&#039;u) / lo&#039;oi (ke&#039;a) || also {xau}&lt;br /&gt;
|-&lt;br /&gt;
| convert function selbri to sumti (using functions as arguments) || me&#039;ei || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| convert function sumti to selbri || me&#039;au || me&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u || be&#039;ei&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti || fancyjo&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis. || na&#039;u&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*{la jalge} is used for an bound variable argument intended as a return value, but that&#039;s pure convention. In Ramcinfo&#039;s approach, any bound variable of selbri could be used as argument or return value as needed.&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117621</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117621"/>
		<updated>2015-09-21T00:00:56Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Comparison with Ross Ogilvie&amp;#039;s system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile/fancu bridi mekso comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| return value || no special notation*, ce&#039;u, ke&#039;a  || ce&#039;au&lt;br /&gt;
|-&lt;br /&gt;
| variable binding || ce&#039;ai || zo&#039;ai ({ce&#039;ai} is also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi (definition) to sumti (first-class function value) || ka || xau ({ni}, {du&#039;u} and {su&#039;u} are also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi to sumti (result of function application) || lo kai&#039;u (ce&#039;u) / lo&#039;oi (ke&#039;a) || also {xau}&lt;br /&gt;
|-&lt;br /&gt;
| convert function selbri to sumti (using functions as arguments) || me&#039;ei || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| convert function sumti to selbri || me&#039;au || me&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u || be&#039;ei&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti || fancyjo&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis. || na&#039;u&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*{la jalge} is used for an bound variable argument intended as a return value, but that&#039;s pure convention. In Ramcinfo&#039;s approach, any bound variables of selbri could be used as arguments and return value(s) as needed.&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117620</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117620"/>
		<updated>2015-09-20T23:59:31Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Comparison with Ross Ogilvie&amp;#039;s system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile/fancu bridi mekso comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| return value || no special notation*, ce&#039;u, ke&#039;a  || ce&#039;au&lt;br /&gt;
|-&lt;br /&gt;
| variable binding || ce&#039;ai || zo&#039;ai ({ce&#039;ai} is also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi (definition) to sumti (first-class function value) || ka || xau ({ni}, {du&#039;u} and {su&#039;u} are also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi to sumti (result) || lo kai&#039;u (ce&#039;u) / lo&#039;oi (ke&#039;a) || also {xau}&lt;br /&gt;
|-&lt;br /&gt;
| convert function selbri to sumti (using functions as arguments) || me&#039;ei || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| convert function sumti to selbri || me&#039;au || me&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u || be&#039;ei&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti || fancyjo&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis. || na&#039;u&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*{la jalge} is used for an bound variable argument intended as a return value, but that&#039;s pure convention. In Ramcinfo&#039;s approach, any bound variables of selbri could be used as arguments and return value(s) as needed.&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117619</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117619"/>
		<updated>2015-09-20T23:48:13Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Comparison with Ross Ogilvie&amp;#039;s system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| return value || no special notation*, ce&#039;u, ke&#039;a  || ce&#039;au&lt;br /&gt;
|-&lt;br /&gt;
| variable binding || ce&#039;ai || zo&#039;ai ({ce&#039;ai} is also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi (definition) to sumti (first-class function value) || ka || xau ({ni}, {du&#039;u} and {su&#039;u} are also considered)&lt;br /&gt;
|-&lt;br /&gt;
| convert function bridi to sumti (result) || lo kai&#039;u (ce&#039;u) / lo&#039;oi (ke&#039;a) || also {xau}&lt;br /&gt;
|-&lt;br /&gt;
| convert function selbri to sumti (using functions as arguments) || me&#039;ei || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u || be&#039;ei&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti || fancyjo&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis. || na&#039;u&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*{la jalge} is used for an bound variable argument intended as a return value, but that&#039;s pure convention.&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117618</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117618"/>
		<updated>2015-09-20T23:19:51Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: Comparison with Ross Ogilvie&amp;#039;s system&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Comparison with Ross Ogilvie&#039;s system ==&lt;br /&gt;
Ross Ogilvie presents a proposal for reformation of mex&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt; with some very similar ideas. Here&#039;s comparation of his notation with one used here:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ fancu staile comparison&lt;br /&gt;
! operation !! Ramcinfo !! Ross Ogilvie&lt;br /&gt;
|-&lt;br /&gt;
| using functions as arguments || me&#039;ei || ni&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| partial application || kai&#039;u || be&#039;ei&lt;br /&gt;
|-&lt;br /&gt;
| function composition || la finti || fancyjo&#039;e&lt;br /&gt;
|-&lt;br /&gt;
| curry || la karis. || na&#039;u&lt;br /&gt;
|-&lt;br /&gt;
| uncurry || - || nu&#039;a&lt;br /&gt;
|-&lt;br /&gt;
| list constructor || la zbasu || ce&#039;o&lt;br /&gt;
|-&lt;br /&gt;
| map || - || porkanji&lt;br /&gt;
|-&lt;br /&gt;
| fold || - || porjmina&lt;br /&gt;
|-&lt;br /&gt;
| filter || klesi || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=117617</id>
		<title>User:Ramcinfo/lojbo staile liste</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=117617"/>
		<updated>2015-09-20T22:02:27Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Principal purpose of this list is to explore ways to use Lojban different from Indo-European natlang ways.&lt;br /&gt;
==Lojban-specific==&lt;br /&gt;
* cmavo-only style&amp;lt;ref&amp;gt;[http://www.lojban.org/tiki/tiki-view_forum_thread.php?forumId=5&amp;amp;comments_parentId=7703&amp;amp;topics_offset=324&amp;amp;topics_sort_mode=lastPost_desc Lojban with only cmavo: an Oulipian strategy]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Inspired by real language features==&lt;br /&gt;
* {{vlapoi|sumcau|staile}}, inspired by nounless languages like that of Salishan and Wakashan families&amp;lt;ref&amp;gt;[https://www.dropbox.com/s/kvj63dtew6hs3z3/ENG%20Davidson%2CM.%20-%20Studies%20in%20southern%20Wakashan%20%28Nootkan%29%20grammar.pdf?dl=0 A grammar of Nootkah]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Lojban#Syntax_and_semantics Example of Lojban imitating Nuu-chah-nulth] (near the end of the section). Note that it is also agglutinative.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
==Inspired by other constructed languages==&lt;br /&gt;
* Verbless style inspired by Kēlen&amp;lt;ref&amp;gt;[http://www.terjemar.net/grammar.php  Kēlen Grammar]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* toki pona style, with e.g. anaphora instead of nested constructs ({mi pinxe lo tcati .i mi masno lonu go&#039;i}). Vocabulary might or might not be restricted.&lt;br /&gt;
==Inspired by fictional languages==&lt;br /&gt;
* Tlön styles, from Borges’ short story. Most Tlön languages lack nouns, so sumti are either avoided or thought of as combinations of properties and/or relations. {{jvs|za&#039;a}} and {{jvs|si&#039;au}} evidentials are common.&lt;br /&gt;
:* snanu .utloine staile: in Southern Tlön style, meaning is constructed from verbs and adverbs. Example:&lt;br /&gt;
{{mu|mo&#039;i ga&#039;u ku ti&#039;a lo zu&#039;o ru&#039;i flecu cu co&#039;a mluni}}&lt;br /&gt;
:* berti .utloine staile: in Northern Tlön style, objects are referred to by combination of adjectives (qualities). Possible lojbanic ways to do so: {{jvs|ka}} and {{jvs|za&#039;i}} abstractions, modals making main level bridi into such abstractions (especially {{vlapoi|kai|ku}} and {{vlapoi|ri&#039;i|ku}}, also {{vlapoi|ci&#039;o|ku}} and {{vlapoi|mu&#039;u|ku}}), {{vlapoi|ca&#039;o|nai}} and {{vlapoi|co&#039;i|nai}} event contours, {{jvs|ru&#039;i}} and {{jvs|ze&#039;e}} interval properties. Example:&lt;br /&gt;
{{mu|kai vacri je gusni ne&#039;i lo kai&#039;u narju je kandi je tsani}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{notci|Note: I am tempted to replace {lo zu&#039;o} and {lo kai&#039;u} with something other in these examples, to completely avoid references to (non-abstract) objects.}}&lt;br /&gt;
* melaxoxengron staile, inspired by “language of dreams” in Max Frei novels. Similar to (especially Northern) Tlön style; default evidential is {{jvs|si&#039;au}}, {{jvs|se&#039;o}} may also be used.&lt;br /&gt;
==Inspired by programming languages==&lt;br /&gt;
* {{vlapoi|minde|sampla|staile}}, corresponding to imperative programming paradigm. Instead of claims, predicates are understood as commands.  Some attempts are done here: [[Writing algorithms in Lojban]].&lt;br /&gt;
* {{vlapoi|fancu|sampla|staile}}, corresponding to functional -&amp;quot;- -&amp;quot;- . Selbri understood as functions. See [[User:Ramcinfo/fancu_staile|the draft]].&lt;br /&gt;
* {{vlapoi|logji|sampla|staile}}, corresponding to logical -&amp;quot;- -&amp;quot;- . Early draft is [[User:Ramcinfo/logji_staile|here]]. See also la jimpe&amp;lt;ref&amp;gt;http://web.mit.edu/~rspeer/Public/jimpe.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* {{vlapoi|tinsa|tectaipe|staile}}, corresponding to strict typing.&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* Stack staile, based on proglangs like Forth and PostScript and conlangs like [[Fith]] and Nalnuàntir&amp;lt;ref&amp;gt;http://conlang.wikia.com/wiki/Nalnu%C3%A0ntir&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Improvements of mekso, e.g. fancu bridi mekso proposal&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt;&lt;br /&gt;
=Credits=&lt;br /&gt;
Many ideas were proposed by [[la gleki]].&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=117616</id>
		<title>User:Ramcinfo/lojbo staile liste</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=117616"/>
		<updated>2015-09-20T22:01:40Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Principal purpose of this list is to explore ways to use Lojban different from Indo-European natlang ways.&lt;br /&gt;
==Lojban-specific==&lt;br /&gt;
* cmavo-only style&amp;lt;ref&amp;gt;[http://www.lojban.org/tiki/tiki-view_forum_thread.php?forumId=5&amp;amp;comments_parentId=7703&amp;amp;topics_offset=324&amp;amp;topics_sort_mode=lastPost_desc Lojban with only cmavo: an Oulipian strategy]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Inspired by real language features==&lt;br /&gt;
* {{vlapoi|sumcau|staile}}, inspired by nounless languages like that of Salishan and Wakashan families&amp;lt;ref&amp;gt;[https://www.dropbox.com/s/kvj63dtew6hs3z3/ENG%20Davidson%2CM.%20-%20Studies%20in%20southern%20Wakashan%20%28Nootkan%29%20grammar.pdf?dl=0 A grammar of Nootkah]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Lojban#Syntax_and_semantics Example of Lojban imitating Nuu-chah-nulth] (near the end of the section). Note that it is also agglutinative.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
==Inspired by other constructed languages==&lt;br /&gt;
* Verbless style inspired by Kēlen&amp;lt;ref&amp;gt;[http://www.terjemar.net/grammar.php  Kēlen Grammar]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* toki pona style, with e.g. anaphora instead of nested constructs ({mi pinxe lo tcati .i mi masno lonu go&#039;i}). Vocabulary might or might not be restricted.&lt;br /&gt;
==Inspired by fictional languages==&lt;br /&gt;
* Tlön styles, from Borges’ short story. Most Tlön languages lack nouns, so sumti are either avoided or thought of as combinations of properties and/or relations. {{jvs|za&#039;a}} and {{jvs|si&#039;au}} evidentials are common.&lt;br /&gt;
:* snanu .utloine staile: in Southern Tlön style, meaning is constructed from verbs and adverbs. Example:&lt;br /&gt;
{{mu|mo&#039;i ga&#039;u ku ti&#039;a lo zu&#039;o ru&#039;i flecu cu co&#039;a mluni}}&lt;br /&gt;
:* berti .utloine staile: in Northern Tlön style, objects are referred to by combination of adjectives (qualities). Possible lojbanic ways to do so: {{jvs|ka}} and {{jvs|za&#039;i}} abstractions, modals making main level bridi into such abstractions (especially {{vlapoi|kai|ku}} and {{vlapoi|ri&#039;i|ku}}, also {{vlapoi|ci&#039;o|ku}} and {{vlapoi|mu&#039;u|ku}}), {{vlapoi|ca&#039;o|nai}} and {{vlapoi|co&#039;i|nai}} event contours, {{jvs|ru&#039;i}} and {{jvs|ze&#039;e}} interval properties. Example:&lt;br /&gt;
{{mu|kai vacri je gusni ne&#039;i lo kai&#039;u narju je kandi je tsani}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{notci|Note: I am tempted to replace {lo zu&#039;o} and {lo kai&#039;u} with something other in these examples, to completely avoid references to (non-abstract) objects.}}&lt;br /&gt;
* melaxoxengron staile, inspired by “language of dreams” in Max Frei novels. Similar to (especially Northern) Tlön style; default evidential is {{jvs|si&#039;au}}, {{jvs|se&#039;o}} may also be used.&lt;br /&gt;
==Inspired by programming languages==&lt;br /&gt;
* {{vlapoi|minde|sampla|staile}}, corresponding to imperative programming paradigm. Instead of claims, predicates are understood as commands.  Some attempts are done here: [[Writing algorithms in Lojban]].&lt;br /&gt;
* {{vlapoi|fancu|sampla|staile}}, corresponding to functional -&amp;quot;- -&amp;quot;- . Selbri understood as functions. See [[User:Ramcinfo/fancu_staile|the draft]]. Ross Oglive also explores this approach&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* {{vlapoi|logji|sampla|staile}}, corresponding to logical -&amp;quot;- -&amp;quot;- . Early draft is [[User:Ramcinfo/logji_staile|here]]. See also la jimpe&amp;lt;ref&amp;gt;http://web.mit.edu/~rspeer/Public/jimpe.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* {{vlapoi|tinsa|tectaipe|staile}}, corresponding to strict typing.&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* Stack staile, based on proglangs like Forth and PostScript and conlangs like [[Fith]] and Nalnuàntir&amp;lt;ref&amp;gt;http://conlang.wikia.com/wiki/Nalnu%C3%A0ntir&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Improvements of mekso, e.g. fancu bridi mekso proposal&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt;&lt;br /&gt;
=Credits=&lt;br /&gt;
Many ideas were proposed by [[la gleki]].&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117605</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117605"/>
		<updated>2015-09-19T23:10:17Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* curry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117604</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117604"/>
		<updated>2015-09-19T23:09:15Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* curry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {ka}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u ka [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei&lt;br /&gt;
  // var redFilter = function (sample) { return filter(sample, red); }; &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117603</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117603"/>
		<updated>2015-09-19T19:42:02Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {kai&#039;u}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u kai&#039;u [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei // var redFilter = filter({definingProperty: red}); &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u a&#039;y ce&#039;o by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117602</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117602"/>
		<updated>2015-09-19T19:23:37Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* curry */  correct (sorta) js in translation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {kai&#039;u}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u kai&#039;u [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei // var redFilter = filter({definingProperty: red}); &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117601</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117601"/>
		<updated>2015-09-19T19:20:59Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* curry */ typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jalge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {kai&#039;u}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u kai&#039;u [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei // var redFilter = filter(definingProperty=red); &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117600</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117600"/>
		<updated>2015-09-19T19:15:48Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: practical example of currying&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Practical (hehe...) example:&lt;br /&gt;
&lt;br /&gt;
    la klesi xiky cu me&#039;au la karis. me&#039;u me&#039;ei setese klesi      // var curriedFilter = curry(filter);&lt;br /&gt;
 .i la xunre xiky cu me&#039;au la klesi xiky me&#039;u lo ka xunre         // var redFilter = curriedFilter(red);&lt;br /&gt;
 .i la jakge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xipu    // var result1 = redFilter(sample1);&lt;br /&gt;
 .i la jakge xipu cu me&#039;au la xunre xiky me&#039;u lo seltadni xire    // var result2 = redFilter(sample2);&lt;br /&gt;
&lt;br /&gt;
In effect, we reinvented {kai&#039;u}:&lt;br /&gt;
 lo goi la xunre xiky ge&#039;u kai&#039;u [ce&#039;u] klesi [ce&#039;u] fi lo ka xunre kei // var redFilter = filter(definingProperty=red); &lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117597</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117597"/>
		<updated>2015-09-18T09:17:56Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: /* curry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo &#039;&#039;goi&#039;&#039; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; &#039;&#039;ge&#039;u&#039;&#039; poi&#039;i&lt;br /&gt;
         ke&#039;a &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; lo &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039;&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu &#039;&#039;me&#039;au&#039;&#039; &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; &#039;&#039;me&#039;u&#039;&#039; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117596</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117596"/>
		<updated>2015-09-18T09:14:55Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: Fixing typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;ai&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;ai&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;ai&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo goi &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; ge&#039;u ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
   lo goi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; ge&#039;u ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;ai&lt;br /&gt;
       lo goi &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu me&#039;au lo me&#039;au &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu me&#039;au &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117595</id>
		<title>User:Ramcinfo/fancu staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/fancu_staile&amp;diff=117595"/>
		<updated>2015-09-18T09:06:24Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: syntax highlighting :)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an attempt to use lojban as a functional programming language. It was in part inspired by [[Missing_predicates#List|Tsani’s recursive predicate]] and, while developed mostly independently, many things are done the same.&lt;br /&gt;
&lt;br /&gt;
Let us think about selbri as function taking its terbri as arguments and returning the predication, or bridi. This predication can be then claimed in context, returning truth-value of resulting bridi in that context.&lt;br /&gt;
&lt;br /&gt;
  function tavla(speaker, listener, subject, language) {...} // returns predication&lt;br /&gt;
  function claim(predication, context) {...} // returns boolean&lt;br /&gt;
  claim(tavla(&amp;quot;me&amp;quot;, &amp;quot;you&amp;quot;, &amp;quot;lojban&amp;quot;, &amp;quot;lojban&amp;quot;), context);&lt;br /&gt;
&lt;br /&gt;
To build functions returning other things, we can use {lo}. Let us not go into intricacies of descriptors and pretend what {lo selbri} returns simply &#039;&#039;some&#039;&#039; value s1 such that claim(selbri(s1, s2...sx), context) will be true for &#039;&#039;some&#039;&#039; values of s2...sx and claimed with &#039;&#039;some&#039;&#039; context. Arguments other than context could be restricted with {be...bei...be&#039;o}. So {lo selbri be sumti2 bei sumti3 be&#039;o} is x1 = selbri1(sumti2, sumti3).&lt;br /&gt;
&lt;br /&gt;
{loka}- and {me&#039;ei}-abstractions, then, are predication-returning functions as first-class values. {me&#039;au} with these abstractions is function application; {kai&#039;u} is immediate function application.&lt;br /&gt;
&lt;br /&gt;
== apply ==&lt;br /&gt;
We are now ready to construct functions taking functions as arguments and/or returning other functions. Let&#039;s start with &#039;&#039;apply&#039;&#039; (for unary function):&lt;br /&gt;
&lt;br /&gt;
  lo goi la pliri&#039;a ge&#039;u ka la jalge la fancu la sumti ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la fancu la sumti kei&lt;br /&gt;
&lt;br /&gt;
  function apply(fun, arg) {&lt;br /&gt;
    return fun(arg); } &lt;br /&gt;
&lt;br /&gt;
Now we can use it as such:&lt;br /&gt;
&lt;br /&gt;
  lo me&#039;au la pliri&#039;a me&#039;u be me&#039;ei tavla bei mi be&#039;o&lt;br /&gt;
&lt;br /&gt;
It could be rewritten in CLL Lojban, but would be (even) less readable:&lt;br /&gt;
  cylylypapi&#039;epa jo&#039;au&lt;br /&gt;
  lo ka bridi ce&#039;u ce&#039;u ce&#039;o ce&#039;u kei goi ko&#039;a&lt;br /&gt;
  zo&#039;u co&#039;e zo&#039;e poi bridi be ko&#039;a bei lo ka ce&#039;u tavla ce&#039;u ku ce&#039;o ke&#039;a ce&#039;o mi&lt;br /&gt;
&lt;br /&gt;
== compose ==&lt;br /&gt;
&lt;br /&gt;
Function composition, &#039;&#039;compose&#039;&#039; (for unary functions, still):&lt;br /&gt;
  lo goi la finti ge&#039;u ka la jalge la fancu xipa la fancu xire ce&#039;ai&lt;br /&gt;
    la jalge cu ka la jalge xipa la sumti ce&#039;ai&lt;br /&gt;
      la jalge xipa cu me&#039;au la fancu xipa lo me&#039;au la fancu xire ku be la sumti kei kei&lt;br /&gt;
&lt;br /&gt;
  function compose(fun, fuun) {&lt;br /&gt;
    return function (arg) {&lt;br /&gt;
      return fun(fuun(arg)); }}&lt;br /&gt;
&lt;br /&gt;
== Recursion ==&lt;br /&gt;
&lt;br /&gt;
Infinite recursion (do not try it at home):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cimnrekursi ge&#039;u ka me&#039;au la cimnrekursi kei &lt;br /&gt;
&lt;br /&gt;
  function infRec() {&lt;br /&gt;
    infRec();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
I am not sure of the last one. Maybe {goi} works only forward in scope. {me&#039;au lo ka nei} (or simply {nei}) will do almost the same, I guess.&lt;br /&gt;
&lt;br /&gt;
== if ==&lt;br /&gt;
&lt;br /&gt;
Confitional (taken from Tsani’s recursive predicate definition, replacing {ckaji} with {du}):&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    ge ganai me&#039;au la krinu gi la jalge cu du by&lt;br /&gt;
       gi ga me&#039;au la krinu gi la jalge cu du cy kei&lt;br /&gt;
&lt;br /&gt;
(What if replace {du} with {me&#039;au}?)&lt;br /&gt;
Maybe also la gleki&#039;s {ifle} will work:&lt;br /&gt;
&lt;br /&gt;
  lo goi la cuxna ge&#039;u ka la jalge la krinu by boi cy ce&#039;ai&lt;br /&gt;
    la krinu cu ifle&lt;br /&gt;
      lo du&#039;u la jalge cu du by kei&lt;br /&gt;
      lo du&#039;u la jalge cu du cy kei kei&lt;br /&gt;
&lt;br /&gt;
== Recursion (again) ==&lt;br /&gt;
&lt;br /&gt;
Now we are ready to build a simple recursion. {krasi} and {fanmo} are used to get first and last elements of sequence, respectively; I am not very sure if this is appropriate. Now if the style is to be developed in the direction of LISP, then functions working on sequences, like &#039;&#039;head&#039;&#039;, &#039;&#039;tail&#039;&#039; and &#039;&#039;cons&#039;&#039; are to be defined.&lt;br /&gt;
&lt;br /&gt;
{je&#039;abo goi} is a hack even dirtier than it is usual for these matters; it is used to both a) group the sequence as one sumti to attach relative clause to it and b) to move that clause to the front.&lt;br /&gt;
&lt;br /&gt;
  lo goi la kancu ge&#039;u ka la jalge la porsi la cabna ce&#039;ai&lt;br /&gt;
    la jalge cu me&#039;au la cuxna lo du&#039;u la cabna cu fanmo la porsi kei li pa&lt;br /&gt;
      lo sumji be li pa lo me&#039;au la kancu ku&lt;br /&gt;
        be la porsi bei lo bavla&#039;i be la cabna bei la porsi kei&lt;br /&gt;
  je&#039;abo goi la mupli ge&#039;u by ce&#039;o cy ce&#039;o dy zo&#039;u&lt;br /&gt;
  li ci cu me&#039;au la kancu la mupli lo krasi be la mupli&lt;br /&gt;
&lt;br /&gt;
  // approximately&lt;br /&gt;
  function len(list, item) {&lt;br /&gt;
    return (list.indexOf(item) === list.length - 1) ? 1 :&lt;br /&gt;
       1 + len(list, list[list.indexOf(item)] + 1); }&lt;br /&gt;
  var sample = [&amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;];&lt;br /&gt;
  assert(3 === len(sample, sample[0]));&lt;br /&gt;
&lt;br /&gt;
== curry ==&lt;br /&gt;
For now, let us pretend that we already have function for &#039;&#039;cons&#039;&#039;, being {la zbasu} (x1 is sequence with head x2 and tail sequence x3. We&#039;ll also use {tersu&#039;imei} for getting function (selbri) arity (we could use {lo se pormei be lo se zilbri be lo ka broda}, or above defined {la kancu} instead of {se pormei}).&lt;br /&gt;
&lt;br /&gt;
 lo goi la karis. ge&#039;u ka&lt;br /&gt;
   la jalge la fancu ce&#039;oi&lt;br /&gt;
   lo goi la karis.xipa ge&#039;u ka&lt;br /&gt;
     la jalge xipa la fancu xipa la terbri ce&#039;oi&lt;br /&gt;
     la jalge xipa cu ka&lt;br /&gt;
       la jalge xire la sumti ce&#039;oi&lt;br /&gt;
       lo goi la terbri xipa ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au la zbasu me&#039;u la sumti la terbri kei zo&#039;u&lt;br /&gt;
       la jalge xire cu me&#039;au la cuxna me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be la fancu xipa cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a bridi la fancu xipa la terbri xipa kei&lt;br /&gt;
         lo poi&#039;i ke&#039;a me&#039;au la karis.xipa me&#039;u la fancu xipa la terbri xipa kei kei kei zo&#039;u&lt;br /&gt;
   la jalge cu me&#039;au la karis.xipa me&#039;u la fancu lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       if (fun.length == args1.length) {&lt;br /&gt;
         return fun(args1)&lt;br /&gt;
       } else {&lt;br /&gt;
         return curry1(fun, args1);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
    la fanxu xinu cu me&#039;au la karis. me&#039;u la fancu&lt;br /&gt;
 .i la fanxu xipu cu me&#039;au la fancu xinu me&#039;u li pu&lt;br /&gt;
 .i la fanxu xire cu me&#039;au la fancu xipu me&#039;u li re&lt;br /&gt;
 .i la jalge cu me&#039;au la fanxu xire me&#039;u li ci&lt;br /&gt;
&lt;br /&gt;
 var curriedFun = curry(fun);&lt;br /&gt;
 var curriedFun1 = curriedFun(1);&lt;br /&gt;
 var curriedFun2 = curriedFun(2);&lt;br /&gt;
 var result = curriedFun(3);&lt;br /&gt;
&lt;br /&gt;
Conditional could be rewritten shorter, but more cryptically (as this style is new):&lt;br /&gt;
 lo goi &amp;lt;u&amp;gt;la karis.&amp;lt;/u&amp;gt; ge&#039;u ka&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; ce&#039;oi&lt;br /&gt;
   lo goi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; ge&#039;u ka&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; ce&#039;oi&lt;br /&gt;
     &amp;lt;u&amp;gt;la jalge xipa&amp;lt;/u&amp;gt; cu ka&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; ce&#039;oi&lt;br /&gt;
       lo goi &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; ge&#039;u poi&#039;i&lt;br /&gt;
         ke&#039;a me&#039;au &amp;lt;u&amp;gt;la zbasu&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la sumti&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri&amp;lt;/u&amp;gt; kei zo&#039;u&lt;br /&gt;
       &amp;lt;u&amp;gt;la jalge xire&amp;lt;/u&amp;gt; cu me&#039;au lo me&#039;au &amp;lt;u&amp;gt;la cunxa&amp;lt;/u&amp;gt; me&#039;u&lt;br /&gt;
         lo du&#039;u lo se tersu&#039;imei be &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; cu dubdu&#039;i&lt;br /&gt;
           lo se pormei be &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei&lt;br /&gt;
         me&#039;ei bridi &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu xipa&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;la terbri xipa&amp;lt;/u&amp;gt; kei kei zo&#039;u&lt;br /&gt;
   &amp;lt;u&amp;gt;la jalge&amp;lt;/u&amp;gt; cu me&#039;au &amp;lt;u&amp;gt;la karis.xipa&amp;lt;/u&amp;gt; me&#039;u &amp;lt;u&amp;gt;la fancu&amp;lt;/u&amp;gt; lo kutpoi kei&lt;br /&gt;
&lt;br /&gt;
 //function apply(fun, args) {return fun.apply(this, args); }&lt;br /&gt;
 function curry(fun) {&lt;br /&gt;
   function curry1(fun, args) {&lt;br /&gt;
     return function (arg) {&lt;br /&gt;
       var args1 = args;&lt;br /&gt;
       args1.unshift(arg);&lt;br /&gt;
       return ((fun.length == args1.length) ? apply : curry1)(fun, args1);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   return curry1(fun, []);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
For conversion between predicate taking sequence as argument and n-ary predicate, {brije&#039;u} (alias {zilbri}) is most natural way:&lt;br /&gt;
&lt;br /&gt;
  a&#039;y konkatena byboi cyboi dyboi ... ≡ me&#039;ei konkatena cu brije&#039;u by ce&#039;o cy ce&#039;o dy ...&lt;br /&gt;
&lt;br /&gt;
Various ways to call a function:&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;&#039;be&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;bei&#039;&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;be&#039;o&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo poi&#039;i ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo kai&#039;u ce&#039;u&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;kei&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;lo&#039;oi ke&#039;a&#039;&#039;&#039; me&#039;au la &#039;&#039;fancu&#039;&#039; me&#039;u &#039;&#039;la sumti&#039;&#039; &#039;&#039;la sumti&#039;&#039; &#039;&#039;&#039;ku&#039;au&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== buboi ==&lt;br /&gt;
In the first version of this draft, {cizra} consctruction {&amp;lt;u&amp;gt;NAME buboi&amp;lt;/u&amp;gt;} was used for variable names. It was a hack, but I knew no better way to assign more-or-less meaningful names to assignable variables. Without {buboi}, I&#039;d be up to my neck in {ko&#039;a}s. Luckily, la menli proposed assigning values with {goi} to cmene. Though {goi} behavior is not fully standardized &amp;lt;ref&amp;gt;http://mw.lojban.org/papri/Lojban_application_issues&amp;lt;/ref&amp;gt;, I consisently place name to be assigned after it, and value being assigned before.&lt;br /&gt;
    &lt;br /&gt;
[[Image:aulbuboi.jpg|thumb|100px| ]]&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=experimental_rafsi&amp;diff=115364</id>
		<title>experimental rafsi</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=experimental_rafsi&amp;diff=115364"/>
		<updated>2015-06-14T17:00:01Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: Minor typo fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;aka &amp;quot;[[rafsi]] not in the official lists&amp;quot; (some are mentioned in [[CLL]], though).&lt;br /&gt;
*{{jvs|jai}} rafsi: &#039;&#039;&#039;jax&#039;&#039;&#039;, &#039;&#039;&#039;jaz&#039;&#039;&#039;&lt;br /&gt;
*{{jvs|nei}} rafsi: &#039;&#039;&#039;nej&#039;&#039;&#039;&lt;br /&gt;
*{{jvs|zi&#039;o}} rafsi: &#039;&#039;&#039;zil&#039;&#039;&#039; (in the gismu list, just not the rafsi list)&lt;br /&gt;
*{{jvs|kibro}} rafsi: &#039;&#039;&#039;kib&#039;&#039;&#039; (experimental gismu)&lt;br /&gt;
&lt;br /&gt;
*[[rab.spir|rab.spir]]:&lt;br /&gt;
*:I suggest these for hex digits:&lt;br /&gt;
**{{jvs|dau}} rafsi: duv&lt;br /&gt;
**{{jvs|fei}} rafsi: fel&lt;br /&gt;
**{{jvs|gai}} rafsi: gam&lt;br /&gt;
**{{jvs|jau}} rafsi: juz&lt;br /&gt;
**[[xei]] rafsi: xem&lt;br /&gt;
**{{jvs|vai}} rafsi: vav&lt;br /&gt;
&lt;br /&gt;
*[[Adam|Adam]]:&lt;br /&gt;
*:{{jvs|rei}} rafsi: rex  (for those who don&#039;t see the need for [[xei|xei]])&lt;br /&gt;
** Or just say that xem is a rafsi for xei or rei, whichever you use.&lt;br /&gt;
*** No other cmavo has a rafsi whose only similarity to it is the vowel.&lt;br /&gt;
&lt;br /&gt;
  coi doi ro do mi&#039;e .telselkik. .i .u&#039;u mi co&#039;a rafsypli&lt;br /&gt;
  .i du&#039;e jbopre pu pante lo za&#039;i lo rafsi cu na&#039;e xamgu kei mi&lt;br /&gt;
  lo drata be lo nu sampu zbasu lo xamgu lo na&#039;e selpli rafsi&lt;br /&gt;
  .i .ai .au co&#039;a cikre .i ko xendo bi&#039;a sidju .au&lt;br /&gt;
&lt;br /&gt;
* .i zo {{jvs|selja&#039;e}} se rafsi ti&#039;e ra&#039;oi &#039;&#039;&#039;se&#039;e&#039;&#039;&#039; (to mi mi&#039;e .tel. na&#039;e finti .i milxe laldo ca .i racli pe&#039;i .i .ei sai lo nu na&#039;e satci cu banzu frili bau la ma&#039;a melbau toi)&lt;br /&gt;
* .i zo {{jvs|mu&#039;umgu}} se rafsi ca&#039;e ra&#039;oi &#039;&#039;&#039;mug&#039;&#039;&#039; (to mi sezysarxe li&#039;a mu&#039;umgu ra&#039;oi &#039;&#039;&#039;mug&#039;&#039;&#039; lo nu mugyta&#039;a kei lo jbopre toi)&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;zmo&#039;&#039;&#039; zo&#039;u: &#039;&#039;fabu&#039;&#039; pilno &#039;&#039;febu&#039;&#039; lo nu &#039;&#039;febu&#039;&#039; jai stika lo ka &#039;&#039;fabu&#039;&#039; lifri ma kau kei lo mutce .i fanva zo&#039;oi &#039;&#039;high&#039;&#039; .e zo&#039;oi &#039;&#039;intoxicated&#039;&#039; .e zo&#039;oi &#039;&#039;entranced&#039;&#039; (to no da ca se rafsi .i ku&#039;i cumki li&#039;a fa lo nu finti lo jitfa krasi zi&#039;evla toi)&lt;br /&gt;
** pe&#039;i .ei sai ro gu&#039;e se valsi be fi zo&#039;e gi smuni cu se brivla da .i se ki&#039;u bo tu&#039;e ca&#039;e zo {{jvs|zmo&#039;una}} se rafsi zo&#039;oi. zmo. tu&#039;u .i ko va&#039;o lo nu na nelci cu jai stika&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;bom&#039;&#039;&#039; .e ra&#039;oi &#039;&#039;&#039;nom&#039;&#039;&#039; .i srana lo nu pilno lo rafsi pe lo jvocme lo nu zbasu lo lujvo .i ka&#039;u ma&#039;a cafne je zasni je xalbo finti lo simsa .i zo xorxesyjbo cu mupli .i la selpa&#039;i ku noi banli cu pilno ti&#039;e (to mi korpora zei sisku mupli facki toi) .i li&#039;a tavla fi la .xorxes. noi ji&#039;a banli .i na li&#039;a tavla fi lo xelso mu&#039;a .i ku&#039;i malrarbausmi relsmununrafpli .i to&#039;e jbosarxe pe&#039;i .i ro ma&#039;a djuno lo du&#039;u na&#039;e jbosarxe .i ma&#039;a mu&#039;i pilno fi lo se xalbo po&#039;o .i ku&#039;i xamgu sidbo pe&#039;i .i pe&#039;i xlali tadji po&#039;o .i .ei satci .i mi mu&#039;i finti ra&#039;oi &#039;&#039;&#039;bom&#039;&#039;&#039; .e ra&#039;oi &#039;&#039;&#039;nom&#039;&#039;&#039; .i to&#039;u zo xorxesyjbo cu binxo zo xorxesnomjbo .i ra&#039;oi &#039;&#039;&#039;bom&#039;&#039;&#039; cu se pilno fi lo nu cmene lidne ke zmadu ciksi .i mu&#039;a lu zabna me la .xorxes. me&#039;u lojbo li&#039;u cu ve lujvo fo zo zanbomxorxesnomjbo .i ca&#039;e ru&#039;e .ia ru&#039;e lu lo combomcmevla li&#039;u mu&#039;a cu panra lu lo co&#039;e do&#039;e la cmevla li&#039;u .i .ia sai .o&#039;a plixautce ciste .i .au pilno lo na&#039;e purselpli rafsi lo banzu xamgu .i xamgu pe&#039;i fa lo nu kargau pe&#039;a lo cnino poi vlaca&#039;u .i zmadu vrici pilno lo zasti rafsi .ui poi sormei .i mutce prali .i .a&#039;o do tugni .i va&#039;i .a&#039;o do nelci lo cizbomselkiknomsi&#039;o doi jbope&#039;o mi&#039;e la stela selckiku mu&#039;o pante&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;ne&#039;a&#039;&#039;&#039; rafsi ca&#039;e zo bebna .i zo bebna cu cafne se pilno fi lo valsi fanmo .i ku&#039;i lo mapti poi rafsi cu selpli fi no da .i pu malne&#039;a pe&#039;i&lt;br /&gt;
&lt;br /&gt;
  zai ze&#039;ei coi jbope&#039;o mi&#039;e .telselkik.&lt;br /&gt;
  .i mi ca&#039;o rafsyxaksygau&lt;br /&gt;
  .i ji&#039;a lo drata cu co&#039;a sidju&lt;br /&gt;
  .i ji&#039;a mi jajgau lo laldo se finti ti poi .uitki&lt;br /&gt;
  .i .a&#039;o ro do plitce&lt;br /&gt;
&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;-xro-&#039;&#039;&#039; rafsi zo xrotu&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;-glo-&#039;&#039;&#039; rafsi zo glotu&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;-xlo-&#039;&#039;&#039; rafsi zo xlotu&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;-va&#039;a-&#039;&#039;&#039; rafsi zo va&#039;arga&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;-zvi-&#039;&#039;&#039; rafsi zo zviki noi la ramcinfo ca&#039;o finti (provisional definition: x1 participates in co-creative act x2 in context of system x3 inspired/allowed by its quality x4; x1 hacks x3 exploiting x4 (x2 being the hack))&lt;br /&gt;
* .i la danmo rozgu cu gasnu lo nu ra&#039;oi &#039;&#039;&#039;-jbo-&#039;&#039;&#039; co&#039;u rafsi zo lojbo je cu co&#039;a rafsi zo jbobo (to ku&#039;i smudu&#039;i toi)&lt;br /&gt;
* .i la .niftyg. cu gasnu lo nu ra&#039;oi &#039;&#039;&#039;-bob-&#039;&#039;&#039; ji&#039;a cu srana lo si&#039;o bobyjbobylobybobyjbojbobylojbo .i mi finti zo bo&#039;objo noi jitfykrasi&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;-vob-&#039;&#039;&#039; rafsi zo vo&#039;a si&#039;au (to zo vobmipri co&#039;e toi)&lt;br /&gt;
* .i li&#039;a ra&#039;oi &#039;&#039;&#039;-goi-&#039;&#039;&#039; je ra&#039;oi &#039;&#039;&#039;-zoi-&#039;&#039;&#039; vaitce .i no drata simsa tordu je cu nu&#039;o selpli .i pe&#039;i no cmalu smuni cu mapti .i .e&#039;u srana lo nu zbasu lo bramau poi canlu .i ra&#039;oi &#039;&#039;&#039;-goi-&#039;&#039;&#039; cu ca&#039;e co&#039;e lo kulnu rafsi .i za&#039;a so&#039;i prenu cu xebni lo kulnu rafsi .i na&#039;e jbosarxe .i to&#039;e klunu&#039;i .i na&#039;e cumki fa lo nu ro remna kulnu cu co&#039;e lo tordu rafsi .i ku&#039;i nandu fa lo nu gasnu lo nu lo zasti poi kulnu rafsi cu co&#039;u se pilno .i mi ca troci lo nu ba&#039;e &#039;&#039;muvdu&#039;&#039; .i ra&#039;oi &#039;&#039;&#039;-mer-&#039;&#039;&#039; pu rafsi zo merko .i ra&#039;oi &#039;&#039;&#039;-mergoi-&#039;&#039;&#039; ca&#039;e co&#039;a rafsi zo merko .i zo merpre binxo zo mergoipre .i da&#039;i sai! ba lo ba zu nu ra&#039;oi &#039;&#039;&#039;-mer-&#039;&#039;&#039; poi lunbe cu co&#039;u pilno fi tu&#039;a zo merko kei cu co&#039;a xamgu fa lo nu pilno ra&#039;oi &#039;&#039;&#039;-mer-&#039;&#039;&#039; lo drata .i zmadu vajni fa lo za&#039;i kakne lo nu finti lo klunu&#039;i dunli clani rafsi be do&#039;e lo vrici poi kulnu je poi jbovla tu&#039;a ki fa lo po&#039;o na&#039;e gismu .i ra&#039;oi &#039;&#039;&#039;-zoi-&#039;&#039;&#039; simsa ca&#039;e je cu srana lo ku&#039;i zifre canlu .i mu&#039;a ra&#039;oi &#039;&#039;&#039;-vanzoi-&#039;&#039;&#039; rafsi zo vanlamigu .i zo vanzoizga mu&#039;a lujvo fo lu vanlamigu zgana li&#039;u .i cizra .ie nai pei fa lo da&#039;i nu lo fadni tordu cu rafsi zo vanlamigu .i mu&#039;i finti lo sarxe barda poi cnino je poi rafsi canlu&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=experimental_rafsi&amp;diff=115363</id>
		<title>experimental rafsi</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=experimental_rafsi&amp;diff=115363"/>
		<updated>2015-06-14T16:32:06Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;aka &amp;quot;[[rafsi]] not in the official lists&amp;quot; (some are mentioned in [[CLL]], though).&lt;br /&gt;
*{{jvs|jai}} rafsi: &#039;&#039;&#039;jax&#039;&#039;&#039;, &#039;&#039;&#039;jaz&#039;&#039;&#039;&lt;br /&gt;
*{{jvs|nei}} rafsi: &#039;&#039;&#039;nej&#039;&#039;&#039;&lt;br /&gt;
*{{jvs|zi&#039;o}} rafsi: &#039;&#039;&#039;zil&#039;&#039;&#039; (in the gismu list, just not the rafsi list)&lt;br /&gt;
*{{jvs|kibro}} rafsi: &#039;&#039;&#039;kib&#039;&#039;&#039; (experimental gismu)&lt;br /&gt;
&lt;br /&gt;
*[[rab.spir|rab.spir]]:&lt;br /&gt;
*:I suggest these for hex digits:&lt;br /&gt;
**{{jvs|dau}} rafsi: duv&lt;br /&gt;
**{{jvs|fei}} rafsi: fel&lt;br /&gt;
**{{jvs|gai}} rafsi: gam&lt;br /&gt;
**{{jvs|jau}} rafsi: juz&lt;br /&gt;
**[[xei]] rafsi: xem&lt;br /&gt;
**{{jvs|vai}} rafsi: vav&lt;br /&gt;
&lt;br /&gt;
*[[Adam|Adam]]:&lt;br /&gt;
*:{{jvs|rei}} rafsi: rex  (for those who don&#039;t see the need for [[xei|xei]])&lt;br /&gt;
** Or just say that xem is a rafsi for xei or rei, whichever you use.&lt;br /&gt;
*** No other cmavo has a rafsi whose only similarity to it is the vowel.&lt;br /&gt;
&lt;br /&gt;
  coi doi ro do mi&#039;e .telselkik. .i .u&#039;u mi co&#039;a rafsypli&lt;br /&gt;
  .i du&#039;e jbopre pu pante lo za&#039;i lo rafsi cu na&#039;e xamgu kei mi&lt;br /&gt;
  lo drata be lo nu sampu zbasu lo xamgu lo na&#039;e selpli rafsi&lt;br /&gt;
  .i .ai .au co&#039;a cikre .i ko xendo bi&#039;a sidju .au&lt;br /&gt;
&lt;br /&gt;
* .i zo {{jvs|selja&#039;e}} se rafsi ti&#039;e ra&#039;oi &#039;&#039;&#039;se&#039;e&#039;&#039;&#039; (to mi mi&#039;e .tel. na&#039;e finti .i milxe laldo ca .i racli pe&#039;i .i .ei sai lo nu na&#039;e satci cu banzu frili bau la ma&#039;a melbau toi)&lt;br /&gt;
* .i zo {{jvs|mu&#039;umgu}} se rafsi ca&#039;e ra&#039;oi &#039;&#039;&#039;mug&#039;&#039;&#039; (to mi sezysarxe li&#039;a mu&#039;umgu ra&#039;oi &#039;&#039;&#039;mug&#039;&#039;&#039; lo nu mugyta&#039;a kei lo jbopre toi)&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;zmo&#039;&#039;&#039; zo&#039;u: &#039;&#039;fabu&#039;&#039; pilno &#039;&#039;febu&#039;&#039; lo nu &#039;&#039;febu&#039;&#039; jai stika lo ka &#039;&#039;fabu&#039;&#039; lifri ma kau kei lo mutce .i fanva zo&#039;oi &#039;&#039;high&#039;&#039; .e zo&#039;oi &#039;&#039;intoxicated&#039;&#039; .e zo&#039;oi &#039;&#039;entranced&#039;&#039; (to no da ca se rafsi .i ku&#039;i cumki li&#039;a fa lo nu finti lo jitfa krasi zi&#039;evla toi)&lt;br /&gt;
** pe&#039;i .ei sai ro gu&#039;e se valsi be fi zo&#039;e gi smuni cu se brivla da .i se ki&#039;u bo tu&#039;e ca&#039;e zo {{jvs|zmo&#039;una}} se rafsi zo&#039;oi. zmo. tu&#039;u .i ko va&#039;o lo nu na nelci cu jai stika&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;bom&#039;&#039;&#039; .e ra&#039;oi &#039;&#039;&#039;nom&#039;&#039;&#039; .i srana lo nu pilno lo rafsi pe lo jvocme lo nu zbasu lo lujvo .i ka&#039;u ma&#039;a cafne je zasni je xalbo finti lo simsa .i zo xorxesyjbo cu mupli .i la selpa&#039;i ku noi banli cu pilno ti&#039;e (to mi korpora zei sisku mupli facki toi) .i li&#039;a tavla fi la .xorxes. noi ji&#039;a banli .i na li&#039;a tavla fi lo xelso mu&#039;a .i ku&#039;i malrarbausmi relsmununrafpli .i to&#039;e jbosarxe pe&#039;i .i ro ma&#039;a djuno lo du&#039;u na&#039;e jbosarxe .i ma&#039;a mu&#039;i pilno fi lo se xalbo po&#039;o .i ku&#039;i xamgu sidbo pe&#039;i .i pe&#039;i xlali tadji po&#039;o .i .ei satci .i mi mu&#039;i finti ra&#039;oi &#039;&#039;&#039;bom&#039;&#039;&#039; .e ra&#039;oi &#039;&#039;&#039;nom&#039;&#039;&#039; .i to&#039;u zo xorxesyjbo cu binxo zo xorxesnomjbo .i ra&#039;oi &#039;&#039;&#039;bom&#039;&#039;&#039; cu se pilno fi lo nu cmene lidne ke zmadu ciksi .i mu&#039;a lu zabna me la .xorxes. me&#039;u lojbo li&#039;u cu ve lujvo fo zo zanbomxorxesnomjbo .i ca&#039;e ru&#039;e .ia ru&#039;e lu lo combomcmevla li&#039;u mu&#039;a cu panra lu lo co&#039;e do&#039;e la cmevla li&#039;u .i .ia sai .o&#039;a plixautce ciste .i .au pilno lo na&#039;e purselpli rafsi lo banzu xamgu .i xamgu pe&#039;i fa lo nu kargau pe&#039;a lo cnino poi vlaca&#039;u .i zmadu vrici pilno lo zasti rafsi .ui poi sormei .i mutce prali .i .a&#039;o do tugni .i va&#039;i .a&#039;o do nelci lo cizbomselkiknomsi&#039;o doi jbope&#039;o mi&#039;e la stela selckiku mu&#039;o pante&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;ne&#039;a&#039;&#039;&#039; rafsi ca&#039;e zo bebna .i zo bebna cu cafne se pilno fi lo valsi fanmo .i ku&#039;i lo mapti poi rafsi cu selpli fi no da .i pu malne&#039;a pe&#039;i&lt;br /&gt;
&lt;br /&gt;
  zai ze&#039;ei coi jbope&#039;o mi&#039;e .telselkik.&lt;br /&gt;
  .i mi ca&#039;o rafsyxaksygau&lt;br /&gt;
  .i ji&#039;a lo drata cu co&#039;a sidju&lt;br /&gt;
  .i ji&#039;a mi jajgau lo laldo se finti ti poi .uitki&lt;br /&gt;
  .i .a&#039;o ro do plitce&lt;br /&gt;
&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;-xro-&#039;&#039;&#039; rafsi zo xrotu&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;-glo-&#039;&#039;&#039; rafsi zo glotu&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;-xlo-&#039;&#039;&#039; rafsi zo xlotu&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;-va&#039;a-&#039;&#039;&#039; rafsi zo va&#039;arga&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;-zvi-&#039;&#039;&#039; rafsi zo zviki noi la ramcinfo ca&#039;o finti (provisional definition: x1 participates in co-creative act x2 in context of system x3 inspired/allowed by it quality x4; x1 hacks x3 exploiting x4 (x2 being the hack))&lt;br /&gt;
* .i la danmo rozgu cu gasnu lo nu ra&#039;oi &#039;&#039;&#039;-jbo-&#039;&#039;&#039; co&#039;u rafsi zo lojbo je cu co&#039;a rafsi zo jbobo (to ku&#039;i smudu&#039;i toi)&lt;br /&gt;
* .i la .niftyg. cu gasnu lo nu ra&#039;oi &#039;&#039;&#039;-bob-&#039;&#039;&#039; ji&#039;a cu srana lo si&#039;o bobyjbobylobybobyjbojbobylojbo .i mi finti zo bo&#039;objo noi jitfykrasi&lt;br /&gt;
* .i ra&#039;oi &#039;&#039;&#039;-vob-&#039;&#039;&#039; rafsi zo vo&#039;a si&#039;au (to zo vobmipri co&#039;e toi)&lt;br /&gt;
* .i li&#039;a ra&#039;oi &#039;&#039;&#039;-goi-&#039;&#039;&#039; je ra&#039;oi &#039;&#039;&#039;-zoi-&#039;&#039;&#039; vaitce .i no drata simsa tordu je cu nu&#039;o selpli .i pe&#039;i no cmalu smuni cu mapti .i .e&#039;u srana lo nu zbasu lo bramau poi canlu .i ra&#039;oi &#039;&#039;&#039;-goi-&#039;&#039;&#039; cu ca&#039;e co&#039;e lo kulnu rafsi .i za&#039;a so&#039;i prenu cu xebni lo kulnu rafsi .i na&#039;e jbosarxe .i to&#039;e klunu&#039;i .i na&#039;e cumki fa lo nu ro remna kulnu cu co&#039;e lo tordu rafsi .i ku&#039;i nandu fa lo nu gasnu lo nu lo zasti poi kulnu rafsi cu co&#039;u se pilno .i mi ca troci lo nu ba&#039;e &#039;&#039;muvdu&#039;&#039; .i ra&#039;oi &#039;&#039;&#039;-mer-&#039;&#039;&#039; pu rafsi zo merko .i ra&#039;oi &#039;&#039;&#039;-mergoi-&#039;&#039;&#039; ca&#039;e co&#039;a rafsi zo merko .i zo merpre binxo zo mergoipre .i da&#039;i sai! ba lo ba zu nu ra&#039;oi &#039;&#039;&#039;-mer-&#039;&#039;&#039; poi lunbe cu co&#039;u pilno fi tu&#039;a zo merko kei cu co&#039;a xamgu fa lo nu pilno ra&#039;oi &#039;&#039;&#039;-mer-&#039;&#039;&#039; lo drata .i zmadu vajni fa lo za&#039;i kakne lo nu finti lo klunu&#039;i dunli clani rafsi be do&#039;e lo vrici poi kulnu je poi jbovla tu&#039;a ki fa lo po&#039;o na&#039;e gismu .i ra&#039;oi &#039;&#039;&#039;-zoi-&#039;&#039;&#039; simsa ca&#039;e je cu srana lo ku&#039;i zifre canlu .i mu&#039;a ra&#039;oi &#039;&#039;&#039;-vanzoi-&#039;&#039;&#039; rafsi zo vanlamigu .i zo vanzoizga mu&#039;a lujvo fo lu vanlamigu zgana li&#039;u .i cizra .ie nai pei fa lo da&#039;i nu lo fadni tordu cu rafsi zo vanlamigu .i mu&#039;i finti lo sarxe barda poi cnino je poi rafsi canlu&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=112356</id>
		<title>User:Ramcinfo/lojbo staile liste</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=112356"/>
		<updated>2015-03-05T02:55:35Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Principal purpose of this list is to explore ways to use Lojban different from Indo-European natlang ways.&lt;br /&gt;
==Lojban-specific==&lt;br /&gt;
* cmavo-only style&amp;lt;ref&amp;gt;[http://www.lojban.org/tiki/tiki-view_forum_thread.php?forumId=5&amp;amp;comments_parentId=7703&amp;amp;topics_offset=324&amp;amp;topics_sort_mode=lastPost_desc Lojban with only cmavo: an Oulipian strategy]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Inspired by real language features==&lt;br /&gt;
* {{vlapoi|sumcau|staile}}, inspired by nounless languages like that of Salishan and Wakashan families&amp;lt;ref&amp;gt;[https://www.dropbox.com/s/kvj63dtew6hs3z3/ENG%20Davidson%2CM.%20-%20Studies%20in%20southern%20Wakashan%20%28Nootkan%29%20grammar.pdf?dl=0 A grammar of Nootkah]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Lojban#Syntax_and_semantics Example of Lojban imitating Nuu-chah-nulth] (near the end of the section). Note that it is also agglutinative.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
==Inspired by other constructed languages==&lt;br /&gt;
* Verbless style inspired by Kēlen&amp;lt;ref&amp;gt;[http://www.terjemar.net/grammar.php  Kēlen Grammar]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* toki pona style, with e.g. anaphora instead of nested constructs ({mi pinxe lo tcati .i mi masno lonu go&#039;i}). Vocabulary might or might not be restricted.&lt;br /&gt;
==Inspired by fictional languages==&lt;br /&gt;
* Tlön styles, from Borges’ short story. Most Tlön languages lack nouns, so sumti are either avoided or thought of as combinations of properties and/or relations. {{jvs|za&#039;a}} and {{jvs|si&#039;au}} evidentials are common.&lt;br /&gt;
:* snanu .utloine staile: in Southern Tlön style, meaning is constructed from verbs and adverbs. Example:&lt;br /&gt;
{{mu|mo&#039;i ga&#039;u ku ti&#039;a lo zu&#039;o ru&#039;i flecu cu co&#039;a mluni}}&lt;br /&gt;
:* berti .utloine staile: in Northern Tlön style, objects are referred to by combination of adjectives (qualities). Possible lojbanic ways to do so: {{jvs|ka}} and {{jvs|za&#039;i}} abstractions, modals making main level bridi into such abstractions (especially {{vlapoi|kai|ku}} and {{vlapoi|ri&#039;i|ku}}, also {{vlapoi|ci&#039;o|ku}} and {{vlapoi|mu&#039;u|ku}}), {{vlapoi|ca&#039;o|nai}} and {{vlapoi|co&#039;i|nai}} event contours, {{jvs|ru&#039;i}} and {{jvs|ze&#039;e}} interval properties. Example:&lt;br /&gt;
{{mu|kai vacri je gusni ne&#039;i lo kai&#039;u narju je kandi je tsani}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{notci|Note: I am tempted to replace {lo zu&#039;o} and {lo kai&#039;u} with something other in these examples, to completely avoid references to (non-abstract) objects.}}&lt;br /&gt;
* melaxoxengron staile, inspired by “language of dreams” in Max Frei novels. Similar to (especially Northern) Tlön style; default evidential is {{jvs|si&#039;au}}, {{jvs|se&#039;o}} may also be used.&lt;br /&gt;
==Inspired by programming languages==&lt;br /&gt;
* {{vlapoi|minde|sampla|staile}}, corresponding to imperative programming paradigm. Instead of claims, predicates are understood as commands.  Some attempts are done here: [[Writing algorithms in Lojban]].&lt;br /&gt;
* {{vlapoi|fancu|sampla|staile}}, corresponding to functional -&amp;quot;- -&amp;quot;- . Selbri understood as functions. See [[User:Ramcinfo/fancu_staile|the draft]].&lt;br /&gt;
* {{vlapoi|logji|sampla|staile}}, corresponding to logical -&amp;quot;- -&amp;quot;- . Early draft is [[User:Ramcinfo/logji_staile|here]]. See also la jimpe&amp;lt;ref&amp;gt;http://web.mit.edu/~rspeer/Public/jimpe.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* {{vlapoi|tinsa|tectaipe|staile}}, corresponding to strict typing.&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* Stack staile, based on proglangs like Forth and PostScript and conlangs like [[Fith]] and Nalnuàntir&amp;lt;ref&amp;gt;http://conlang.wikia.com/wiki/Nalnu%C3%A0ntir&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Improvements of mekso, e.g. fancu bridi mekso proposal&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt;&lt;br /&gt;
=Credits=&lt;br /&gt;
Many ideas were proposed by [[la gleki]].&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/logji_staile&amp;diff=112355</id>
		<title>User:Ramcinfo/logji staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/logji_staile&amp;diff=112355"/>
		<updated>2015-03-05T02:54:34Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;staile inspired by programming languages Prolog and Erlang.&lt;br /&gt;
&lt;br /&gt;
  li no&lt;br /&gt;
    cu me&#039;au la kancu me&#039;u&lt;br /&gt;
      lo kutpoi&lt;br /&gt;
 &lt;br /&gt;
  lo&#039;oi ke&#039;a sumji li pa&lt;br /&gt;
      lo me&#039;au la kancu me&#039;u be da ku&#039;au&lt;br /&gt;
    cu me&#039;au la kancu me&#039;u&lt;br /&gt;
      lo&#039;oi ke&#039;a konkatena vu&#039;i zo&#039;e da ku&#039;au&lt;br /&gt;
&lt;br /&gt;
Equivalent definitions in Prolog and Erlang: http://danlucraft.com/blog/2007/08/comparing-erlang-and-prolog/&lt;br /&gt;
&lt;br /&gt;
See also: http://hyperpolyglot.org/logic&lt;br /&gt;
&lt;br /&gt;
I have doubts of defining sequence of single undefined element as {vu&#039;i zo&#039;e} — couldn’t zo&#039;e be e.g. a set with cardinality &amp;gt; 1?&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/logji_staile&amp;diff=112354</id>
		<title>User:Ramcinfo/logji staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/logji_staile&amp;diff=112354"/>
		<updated>2015-03-05T02:54:15Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;staile inspired by programming languages Prolog and Erlang.&lt;br /&gt;
&lt;br /&gt;
  li no&lt;br /&gt;
    cu me&#039;au la kancu me&#039;u&lt;br /&gt;
      lo kutpoi&lt;br /&gt;
 &lt;br /&gt;
  lo&#039;oi ke&#039;a sumji li pa&lt;br /&gt;
      lo me&#039;au la kancu me&#039;u be da ku&#039;au&lt;br /&gt;
    cu me&#039;au la kancu me&#039;u&lt;br /&gt;
      lo&#039;oi ke&#039;a konkatena vu&#039;i zo&#039;e da ku&#039;au&lt;br /&gt;
&lt;br /&gt;
Equivalent definitions in Prolog and Erlang: http://danlucraft.com/blog/2007/08/comparing-erlang-and-prolog/&lt;br /&gt;
See also: http://hyperpolyglot.org/logic&lt;br /&gt;
&lt;br /&gt;
I have doubts of defining sequence of single undefined element as {vu&#039;i zo&#039;e} — couldn’t zo&#039;e be e.g. a set with cardinality &amp;gt; 1?&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=112353</id>
		<title>User:Ramcinfo/lojbo staile liste</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=112353"/>
		<updated>2015-03-05T00:03:07Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Principal purpose of this list is to explore ways to use Lojban different from Indo-European natlang ways.&lt;br /&gt;
==Lojban-specific==&lt;br /&gt;
* cmavo-only style&amp;lt;ref&amp;gt;[http://www.lojban.org/tiki/tiki-view_forum_thread.php?forumId=5&amp;amp;comments_parentId=7703&amp;amp;topics_offset=324&amp;amp;topics_sort_mode=lastPost_desc Lojban with only cmavo: an Oulipian strategy]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Inspired by real language features==&lt;br /&gt;
* {{vlapoi|sumcau|staile}}, inspired by nounless languages like that of Salishan and Wakashan families&amp;lt;ref&amp;gt;[https://www.dropbox.com/s/kvj63dtew6hs3z3/ENG%20Davidson%2CM.%20-%20Studies%20in%20southern%20Wakashan%20%28Nootkan%29%20grammar.pdf?dl=0 A grammar of Nootkah]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Lojban#Syntax_and_semantics Example of Lojban imitating Nuu-chah-nulth] (near the end of the section). Note that it is also agglutinative.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
==Inspired by other constructed languages==&lt;br /&gt;
* Verbless style inspired by Kēlen&amp;lt;ref&amp;gt;[http://www.terjemar.net/grammar.php  Kēlen Grammar]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* toki pona style, with e.g. anaphora instead of nested constructs ({mi pinxe lo tcati .i mi masno lonu go&#039;i}). Vocabulary might or might not be restricted.&lt;br /&gt;
==Inspired by fictional languages==&lt;br /&gt;
* Tlön styles, from Borges’ short story. Most Tlön languages lack nouns, so sumti are either avoided or thought of as combinations of properties and/or relations. {{jvs|za&#039;a}} and {{jvs|si&#039;au}} evidentials are common.&lt;br /&gt;
:* snanu .utloine staile: in Southern Tlön style, meaning is constructed from verbs and adverbs. Example:&lt;br /&gt;
{{mu|mo&#039;i ga&#039;u ku ti&#039;a lo zu&#039;o ru&#039;i flecu cu co&#039;a mluni}}&lt;br /&gt;
:* berti .utloine staile: in Northern Tlön style, objects are referred to by combination of adjectives (qualities). Possible lojbanic ways to do so: {{jvs|ka}} and {{jvs|za&#039;i}} abstractions, modals making main level bridi into such abstractions (especially {{vlapoi|kai|ku}} and {{vlapoi|ri&#039;i|ku}}, also {{vlapoi|ci&#039;o|ku}} and {{vlapoi|mu&#039;u|ku}}), {{vlapoi|ca&#039;o|nai}} and {{vlapoi|co&#039;i|nai}} event contours, {{jvs|ru&#039;i}} and {{jvs|ze&#039;e}} interval properties. Example:&lt;br /&gt;
{{mu|kai vacri je gusni ne&#039;i lo kai&#039;u narju je kandi je tsani}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{notci|Note: I am tempted to replace {lo zu&#039;o} and {lo kai&#039;u} with something other in these examples, to completely avoid references to (non-abstract) objects.}}&lt;br /&gt;
* melaxoxengron staile, inspired by “language of dreams” in Max Frei novels. Similar to (especially Northern) Tlön style; default evidential is {{jvs|si&#039;au}}, {{jvs|se&#039;o}} may also be used.&lt;br /&gt;
==Inspired by programming languages==&lt;br /&gt;
* {{vlapoi|minde|sampla|staile}}, corresponding to imperative programming paradigm. Instead of claims, predicates are understood as commands.&lt;br /&gt;
* {{vlapoi|fancu|sampla|staile}}, corresponding to functional -&amp;quot;- -&amp;quot;- . Selbri understood as functions. See [[User:Ramcinfo/fancu_staile|the draft]].&lt;br /&gt;
* {{vlapoi|logji|sampla|staile}}, corresponding to logical -&amp;quot;- -&amp;quot;- . Early draft is [[User:Ramcinfo/logji_staile|here]]. See also la jimpe&amp;lt;ref&amp;gt;http://web.mit.edu/~rspeer/Public/jimpe.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* {{vlapoi|tinsa|tectaipe|staile}}, corresponding to strict typing. Some attempts are done here: [[Writing algorithms in Lojban]].&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* Stack staile, based on proglangs like Forth and PostScript and conlangs like [[Fith]] and Nalnuàntir&amp;lt;ref&amp;gt;http://conlang.wikia.com/wiki/Nalnu%C3%A0ntir&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Improvements of mekso, e.g. fancu bridi mekso proposal&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt;&lt;br /&gt;
=Credits=&lt;br /&gt;
Many ideas were proposed by [[la gleki]].&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=112352</id>
		<title>User:Ramcinfo/lojbo staile liste</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=112352"/>
		<updated>2015-03-04T23:56:09Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Principal purpose of this list is to explore ways to use Lojban different from Indo-European natlang ways.&lt;br /&gt;
==Lojban-specific==&lt;br /&gt;
* cmavo-only style&amp;lt;ref&amp;gt;[http://www.lojban.org/tiki/tiki-view_forum_thread.php?forumId=5&amp;amp;comments_parentId=7703&amp;amp;topics_offset=324&amp;amp;topics_sort_mode=lastPost_desc Lojban with only cmavo: an Oulipian strategy]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Inspired by real language features==&lt;br /&gt;
* {{vlapoi|sumcau|staile}}, inspired by nounless languages like that of Salishan and Wakashan families&amp;lt;ref&amp;gt;[https://www.dropbox.com/s/kvj63dtew6hs3z3/ENG%20Davidson%2CM.%20-%20Studies%20in%20southern%20Wakashan%20%28Nootkan%29%20grammar.pdf?dl=0 A grammar of Nootkah]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Lojban#Syntax_and_semantics Example of Lojban imitating Nuu-chah-nulth] (near the end of the section). Note that it is also agglutinative.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
==Inspired by other constructed languages==&lt;br /&gt;
* Verbless style inspired by Kēlen&amp;lt;ref&amp;gt;[http://www.terjemar.net/grammar.php  Kēlen Grammar]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* toki pona style, with e.g. anaphora instead of nested constructs ({mi pinxe lo tcati .i mi masno lonu go&#039;i}). Vocabulary might or might not be restricted.&lt;br /&gt;
==Inspired by fictional languages==&lt;br /&gt;
* Tlön styles, from Borges’ short story. Most Tlön languages lack nouns, so sumti are either avoided or thought of as combinations of properties and/or relations. {{jvs|za&#039;a}} and {{jvs|si&#039;au}} evidentials are common.&lt;br /&gt;
:* snanu .utloine staile: in Southern Tlön style, meaning is constructed from verbs and adverbs. Example:&lt;br /&gt;
{{mu|mo&#039;i ga&#039;u ku ti&#039;a lo zu&#039;o ru&#039;i flecu cu co&#039;a mluni}}&lt;br /&gt;
:* berti .utloine staile: in Northern Tlön style, objects are referred to by combination of adjectives (qualities). Possible lojbanic ways to do so: {{jvs|ka}} and {{jvs|za&#039;i}} abstractions, modals making main level bridi into such abstractions (especially {{vlapoi|kai|ku}} and {{vlapoi|ri&#039;i|ku}}, also {{vlapoi|ci&#039;o|ku}} and {{vlapoi|mu&#039;u|ku}}), {{vlapoi|ca&#039;o|nai}} and {{vlapoi|co&#039;i|nai}} event contours, {{jvs|ru&#039;i}} and {{jvs|ze&#039;e}} interval properties. Example:&lt;br /&gt;
{{mu|kai vacri je gusni ne&#039;i lo kai&#039;u narju je kandi je tsani}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{notci|Note: I am tempted to replace {lo zu&#039;o} and {lo kai&#039;u} with something other in these examples, to completely avoid references to (non-abstract) objects.}}&lt;br /&gt;
* melaxoxengron staile, inspired by “language of dreams” in Max Frei novels. Similar to (especially Northern) Tlön style; default evidential is {{jvs|si&#039;au}}, {{jvs|se&#039;o}} may also be used.&lt;br /&gt;
==Inspired by programming languages==&lt;br /&gt;
* {{vlapoi|minde|sampla|staile}}, corresponding to imperative programming paradigm. Instead of claims, predicates are understood as commands.&lt;br /&gt;
* {{vlapoi|fancu|sampla|staile}}, corresponding to functional -&amp;quot;- -&amp;quot;- . Selbri understood as functions. See [[User:Ramcinfo/fancu_staile|the draft]].&lt;br /&gt;
* {{vlapoi|logji|sampla|staile}}, corresponding to logical -&amp;quot;- -&amp;quot;- .&lt;br /&gt;
* {{vlapoi|tinsa|tectaipe|staile}}, corresponding to strict typing.&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* Stack staile, based on proglangs like Forth and PostScript and conlangs like [[Fith]] and Nalnuàntir&amp;lt;ref&amp;gt;http://conlang.wikia.com/wiki/Nalnu%C3%A0ntir&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Improvements of mekso, e.g. fancu bridi mekso proposal&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/ref&amp;gt;&lt;br /&gt;
=Credits=&lt;br /&gt;
Many ideas were proposed by [[la gleki]].&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=112351</id>
		<title>User:Ramcinfo/lojbo staile liste</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/lojbo_staile_liste&amp;diff=112351"/>
		<updated>2015-03-04T23:54:36Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Principal purpose of this list is to explore ways to use Lojban different from Indo-European natlang ways.&lt;br /&gt;
==Lojban-specific==&lt;br /&gt;
* cmavo-only style&amp;lt;ref&amp;gt;[http://www.lojban.org/tiki/tiki-view_forum_thread.php?forumId=5&amp;amp;comments_parentId=7703&amp;amp;topics_offset=324&amp;amp;topics_sort_mode=lastPost_desc Lojban with only cmavo: an Oulipian strategy]&amp;lt;/ref&amp;gt;&lt;br /&gt;
==Inspired by real language features==&lt;br /&gt;
* {{vlapoi|sumcau|staile}}, inspired by nounless languages like that of Salishan and Wakashan families&amp;lt;ref&amp;gt;[https://www.dropbox.com/s/kvj63dtew6hs3z3/ENG%20Davidson%2CM.%20-%20Studies%20in%20southern%20Wakashan%20%28Nootkan%29%20grammar.pdf?dl=0 A grammar of Nootkah]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Lojban#Syntax_and_semantics Example of Lojban imitating Nuu-chah-nulth] (near the end of the section). Note that it is also agglutinative.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
==Inspired by other constructed languages==&lt;br /&gt;
* Verbless style inspired by Kēlen&amp;lt;ref&amp;gt;[http://www.terjemar.net/grammar.php  Kēlen Grammar]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* toki pona style, with e.g. anaphora instead of nested constructs ({mi pinxe lo tcati .i mi masno lonu go&#039;i}). Vocabulary might or might not be restricted.&lt;br /&gt;
==Inspired by fictional languages==&lt;br /&gt;
* Tlön styles, from Borges’ short story. Most Tlön languages lack nouns, so sumti are either avoided or thought of as combinations of properties and/or relations. {{jvs|za&#039;a}} and {{jvs|si&#039;au}} evidentials are common.&lt;br /&gt;
:* snanu .utloine staile: in Southern Tlön style, meaning is constructed from verbs and adverbs. Example:&lt;br /&gt;
{{mu|mo&#039;i ga&#039;u ku ti&#039;a lo zu&#039;o ru&#039;i flecu cu co&#039;a mluni}}&lt;br /&gt;
:* berti .utloine staile: in Northern Tlön style, objects are referred to by combination of adjectives (qualities). Possible lojbanic ways to do so: {{jvs|ka}} and {{jvs|za&#039;i}} abstractions, modals making main level bridi into such abstractions (especially {{vlapoi|kai|ku}} and {{vlapoi|ri&#039;i|ku}}, also {{vlapoi|ci&#039;o|ku}} and {{vlapoi|mu&#039;u|ku}}), {{vlapoi|ca&#039;o|nai}} and {{vlapoi|co&#039;i|nai}} event contours, {{jvs|ru&#039;i}} and {{jvs|ze&#039;e}} interval properties. Example:&lt;br /&gt;
{{mu|kai vacri je gusni ne&#039;i lo kai&#039;u narju je kandi je tsani}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{notci|Note: I am tempted to replace {lo zu&#039;o} and {lo kai&#039;u} with something other in these examples, to completely avoid references to (non-abstract) objects.}}&lt;br /&gt;
* melaxoxengron staile, inspired by “language of dreams” in Max Frei novels. Similar to (especially Northern) Tlön style; default evidential is {{jvs|si&#039;au}}, {{jvs|se&#039;o}} may also be used.&lt;br /&gt;
==Inspired by programming languages==&lt;br /&gt;
* {{vlapoi|minde|sampla|staile}}, corresponding to imperative programming paradigm. Instead of claims, predicates are understood as commands.&lt;br /&gt;
* {{vlapoi|fancu|sampla|staile}}, corresponding to functional -&amp;quot;- -&amp;quot;- . Selbri understood as functions. See [[User:Ramcinfo/fancu_staile|the draft]].&lt;br /&gt;
* {{vlapoi|logji|sampla|staile}}, corresponding to logical -&amp;quot;- -&amp;quot;- .&lt;br /&gt;
* {{vlapoi|tinsa|tectaipe|staile}}, corresponding to strict typing.&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
* Stack staile, based on proglangs like Forth and PostScript and conlangs like [[Fith]] and Nalnuàntir&amp;lt;ref&amp;gt;http://conlang.wikia.com/wiki/Nalnu%C3%A0ntir&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Improvements of mekso, e.g. fancu bridi mekso proposal&amp;lt;ref&amp;gt;http://rossogilvie.id.au/essays/2013-01-22-fancu-bridi-mekso/&amp;lt;/def&amp;gt;&lt;br /&gt;
=Credits=&lt;br /&gt;
Many ideas were proposed by [[la gleki]].&lt;br /&gt;
=References=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
	<entry>
		<id>https://mw.lojban.org/index.php?title=User:Ramcinfo/logji_staile&amp;diff=112350</id>
		<title>User:Ramcinfo/logji staile</title>
		<link rel="alternate" type="text/html" href="https://mw.lojban.org/index.php?title=User:Ramcinfo/logji_staile&amp;diff=112350"/>
		<updated>2015-03-04T23:41:38Z</updated>

		<summary type="html">&lt;p&gt;Ramcinfo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;staile inspired by programming languages Prolog and Erlang.&lt;br /&gt;
&lt;br /&gt;
  li no&lt;br /&gt;
    cu me&#039;au la kancu me&#039;u&lt;br /&gt;
      lo kutpoi&lt;br /&gt;
 &lt;br /&gt;
  lo&#039;oi ke&#039;a sumji li pa&lt;br /&gt;
      lo me&#039;au la kancu me&#039;u be da ku&#039;au&lt;br /&gt;
    cu me&#039;au la kancu me&#039;u&lt;br /&gt;
      lo&#039;oi ke&#039;a konkatena vu&#039;i zo&#039;e da ku&#039;au&lt;br /&gt;
&lt;br /&gt;
Equivalent definitions in Prolog and Erlang: http://danlucraft.com/blog/2007/08/comparing-erlang-and-prolog/&lt;br /&gt;
&lt;br /&gt;
I have doubts of defining sequence of single undefined element as {vu&#039;i zo&#039;e} — couldn’t zo&#039;e be e.g. a set with cardinality &amp;gt; 1?&lt;/div&gt;</summary>
		<author><name>Ramcinfo</name></author>
	</entry>
</feed>