;; sitelen_pona_pi_ilo_sona.fnl
(fn [num]
(local {: 100 : 20 : 5 : 2 : 1})
(let [tbl []]
(var acc 0)
(for [i 1 (length num) 4]
(table.insert tbl (. (num:sub i (+ i 3)))))
(for [i 1 (length tbl)]
(let [cur (. tbl i)
next (. tbl (+ i 1))]
(when next
(if (< cur next)
(do
(tset tbl (+ i 1) (* cur next))
(tset tbl i nil))))))
(each [k v (pairs tbl)]
(set acc (+ acc v)))
acc))
(fn [ & ]
`(fn , ,(unpack )))
(fn [& rest]
`(not ,(unpack rest)))
(fn [& body]
`(when ,(unpack body)))
(fn [& rest]
`(if ,(unpack rest)))
(fn [& ]
`(and ,(unpack )))
(fn [& ]
`(or ,(unpack )))
(fn [& ]
`(. ,(unpack )))
(fn [ & ]
`(let , ,(unpack )))
(fn [ & ]
`(var , ,(unpack )))
(fn [ & ]
`(local , ,(unpack )))
(fn []
`(print ,))
{:
:
:
:
:
:
:
:
:
:
:
: }
(fn ike->pona [num]
"convert a number from arabic numerals to nanpa pona"
(var done? false)
(var i 1)
(local vals [100 20 5 2 1])
(local pona ["" "" "" "" ""])
(while (not done?)
(if (<= (. vals i) num)
(set done? true)
(set i (+ i 1))))
( [count (math.floor (/ num (. vals i)))
val (% num (. vals i))]
(.. (if (> count 1)
(ike->pona count)
"")
(. pona i)
(if (> val 0)
(ike->pona val)
""))))
(import-macros {:
:
:
:
:
:
:
:
:
:
:
: } :sitelen_pona_pi_ilo_sona)
( []
:
( false)
( i ( :))
( [100 20 5 2 1])
( [: : : : :])
(while ( )
(
(<= ( i) )
(set true)
(set i (+ i ( :)))))
( [ (math.floor (/ ( i))) (% (. i))]
(.. ( (> ( :))
( )
"")
( i)
( (> (- ( :) ( :)))
( )
""))))
( ( 128))
「」
(macro [num]
(local {: 100 : 20 : 5 : 2 : 1})
(let [tbl []]
(var acc 0)
(for [i 1 (length num) 4]
(table.insert tbl (. (num:sub i (+ i 3)))))
(for [i 1 (length tbl)]
(let [cur (. tbl i)
next (. tbl (+ i 1))]
(when next
(if (< cur next)
(do
(tset tbl (+ i 1) (* cur next))
(tset tbl i nil))))))
(each [k v (pairs tbl)]
(set acc (+ acc v)))
acc))
(macro [ & ]
`(fn , ,(unpack )))
(macro [& rest]
`(not ,(unpack rest)))
(macro [& body]
`(when ,(unpack body)))
(macro [& rest]
`(if ,(unpack rest)))
(macro [& ]
`(and ,(unpack )))
(macro [& ]
`(or ,(unpack )))
(macro [& ]
`(. ,(unpack )))
(macro [ & ]
`(let , ,(unpack )))
(macro [ & ]
`(var , ,(unpack )))
(macro [ & ]
`(local , ,(unpack )))
(macro []
`(print ,))
(
{ :kijetesantakalu ""
:kokosila ""
:misikeke ""
:kepeken ""
:monsuta ""
:sitelen ""
:jasima ""
:kalama ""
:kipisi ""
:kulupu ""
:lanpan ""
:majuna ""
:namako ""
:pakala ""
:palisa ""
:pimeja ""
:sijelo ""
:sinpin ""
:soweli ""
:akesi ""
:alasa ""
:apeja ""
:epiku ""
:kiwen ""
:linja ""
:lukin ""
:monsi ""
:nanpa ""
:nasin ""
:pilin ""
:tenpo ""
:tonsi ""
:utala ""
:anpa ""
:ante ""
:awen ""
:esun ""
:insa ""
:jaki ""
:jelo ""
:kala ""
:kama ""
:kasi ""
:kili ""
:kule ""
:kute ""
:lape ""
:laso ""
:lawa ""
:leko ""
:lete ""
:lili ""
:lipu ""
:loje ""
:luka ""
:lupa ""
:mama ""
:mani ""
:meli ""
:meso ""
:mije ""
:moku ""
:moli ""
:musi ""
:mute ""
:nasa ""
:nena ""
:nimi ""
:noka ""
:olin ""
:open ""
:pake ""
:pali ""
:pana ""
:pini ""
:pipi ""
:poka ""
:poki ""
:pona ""
:powe ""
:sama ""
:seli ""
:selo ""
:seme ""
:sewi ""
:sike ""
:sina ""
:soko ""
:sona ""
:suli ""
:suno ""
:supa ""
:suwi ""
:taso ""
:tawa ""
:telo ""
:toki ""
:tomo ""
:unpa ""
:walo ""
:waso ""
:wawa ""
:weka ""
:wile ""
:ala ""
:ale ""
:ali ""
:anu ""
:ijo ""
:ike ""
:ilo ""
:jan ""
:ken ""
:kin ""
:kon ""
:len ""
:lon ""
:mun ""
:oko ""
:ona ""
:pan ""
:sin ""
:tan ""
:uta ""
:wan ""
:en ""
:jo ""
:ko ""
:ku ""
:la ""
:li ""
:ma ""
:mi ""
:mu ""
:ni ""
:pi ""
:pu ""
:tu ""
:a ""
:e ""
:n ""
:o ""})
(vim.api.nvim_create_autocmd
[:insertCharPre]
{:pattern "*.fnl"
:callback ( []
( (= vim.v.char " ")
( [ (string.sub (vim.fn.getline :.) ( :) (- (vim.fn.col :.) ( :)))
[ ] [(:find "%w+$")]]
( ( )
( [ ( (:sub ))
(vim.fn.col :.)]
(
(set vim.v.char "")
(vim.schedule ( []
(vim.cmd (.. ".s/" (:sub ) "/" "/"))
(vim.cmd "normal! $")
(vim.cmd "normal! l")))))))))})