Welcome, I'm happy to see you here! Feel free to pick a function and add a happy example, the more the merrier!
> (eprin "there is a boo-boo on line " 33 "\n" )
there is a boo-boo on line 33
nil
(eval-string "(+ 1 2 3 4)" ) # -> 10
(eval-string ")" ) # -> parse error
(eval-string "(bloop)" ) # -> compile error
(eval-string "(+ nil nil)" ) # -> runtime error (def channel (ev/chan ))
(ev/spawn
(do
(for i 0 10
(ev/give channel (math/random ))
(ev/sleep 0.25 ))
(ev/chan-close channel )))
(defn consumer [name delay ]
(loop [item :iterate (ev/take channel )]
(match item
[:close _ ] nil
v (print name " got " v ))))
(ev/call consumer "bob" 1 )
(ev/call consumer "alice" 3 )
(map bytes? [ 'ab :ab "ab" @"ab" [97 98 ] @[97 98 ] {0 97 1 98 } @{0 97 1 98 } ])
# => @[ true true true true false false false false ]
(map symbol? [ 'ab :ab "ab" @"ab" [97 98 ] @[97 98 ] {0 97 1 98 } @{0 97 1 98 } ])
# => @[ true false false false false false false false ]
(map keyword? [ 'ab :ab "ab" @"ab" [97 98 ] @[97 98 ] {0 97 1 98 } @{0 97 1 98 } ])
# => @[ false true false false false false false false ]
(map string? [ 'ab :ab "ab" @"ab" [97 98 ] @[97 98 ] {0 97 1 98 } @{0 97 1 98 } ])
# => @[ false false true false false false false false ]
(map buffer? [ 'ab :ab "ab" @"ab" [97 98 ] @[97 98 ] {0 97 1 98 } @{0 97 1 98 } ])
# => @[ false false false true false false false false ] (keyword/slice "some crazy keyword" 11 -1 )
# returns :keyword @[1 2 3] # -> @[1 2 3]
(array 1 2 3) # -> @[1 2 3]
(array (splice [1 2 3]) # -> @[1 2 3]
(array ;[1 2 3]) # -> @[1 2 3]
# channels that can be used for communication between os threads
(def chan-a (ev/thread-chan 10 ))
(def chan-b (ev/thread-chan 10 ))
# one thread
(ev/thread
(fiber/new
(fn []
(def msg "hi" )
(print "thread 1 sending: " msg )
(ev/give chan-a msg )
#
(print "thread 1 received: " (ev/take chan-b ))))
:1
:n )
# another thread
(ev/thread
(fiber/new
(fn []
(print "thread 2 received: " (ev/take chan-a ))
#
(def msg "peace" )
(print "thread 2 sending: " msg )
(ev/give chan-b msg )))
:2
:n )
# expected output
#
# thread 1 sending: hi
# thread 2 received: hi
# thread 2 sending: peace
# thread 1 received: peace
(abstract? (file/temp )) # => true
(abstract? (int/s64 1 )) # => true
(map abstract? [ nil true 97 'a :a "a" ])
# => @[false false false false false false]
(map abstract? [ [97 ] @[97 ] {0 97 } @{0 97 } ])
# => @[false false false false]
(map abstract? [ even? loop file/open (fn []) ])
# => @[false false false false]
(map abstract? [ (file/temp ) (fiber/new (fn [])) ])
# => @[true false]
(string/trimr " foo " ) # => " foo"
(string/trimr "_!_foo_!_" "_!" ) # => "_!_foo" (string/replace "+" "-" "ctrl+c" )
# => "ctrl-c" (eachk k {:a "a val" :b "b val" :c "c val" } (print k ))
# prints c
# prints a
# prints b (keyword : )
# => : (get [4 5 6 ] -1 ) # => nil
(in [4 5 6 ] -1 42 ) # error
(get-in [4 5 6 ] [-1 ] 42 ) # => 42
(get {:a 1 } -1 ) # => nil
(in {:a 1 } -1 42 ) # => 42
(get-in {:a 1 } [-1 ] 42 ) # => 42
# note, if running a server from the repl, you need to (quit) your repl.
# in a terminal:
# $ while true; do date | nc 0.0.0.0 1234 -w 1; sleep 1; done
# in a janet repl:
(net/server "0.0.0.0" 1234
(fn [conn ]
(prin (net/read conn 4096 ))
(net/close conn )))
# output doesn't actually start until you (quit) your repl's fiber:
(quit )
(map |($ {:a 7 :b 8 } ) [ keys values kvs pairs ])
# => @[ @[:a :b] @[7 8] @[:a 7 :b 8] @[(:a 7) (:b 8)] ]
(map |($ [4 5 6 ] ) [ keys values kvs pairs ])
# => @[ @[0 1 2] @[4 5 6] @[0 4 1 5 2 6] @[(0 4) (1 5) (2 6)] ]
(map |($ 'ab ) [ keys values kvs pairs ])
# => @[ @[0 1] @[97 98] @[0 97 1 98] @[(0 97) (1 98)] ]
(map |($ :ab ) [ keys values kvs pairs ])
# => @[ @[0 1] @[97 98] @[0 97 1 98] @[(0 97) (1 98)] ]
(map |($ "ab" ) [ keys values kvs pairs ])
# => @[ @[0 1] @[97 98] @[0 97 1 98] @[(0 97) (1 98)] ]