Welcome, I'm happy to see you here! Feel free to pick a function and add a happy example, the more the merrier!
(keyword? :a ) # => true
(keyword? "a" ) # => false # many terminals will truncate long data, use this if you need to see/copypaste it:
(defn full-print `Print a large DS without truncation` [ds ] (print (string/format "%m" ds )))# When the :doc-color dynamic binding referenced by *doc-color* is truthy,
# the doc-format function replaces a minimal subset of Markdown markup with
# the corresponding ANSI escape codes.
#
# The following markup is supported:
# - *this will be underlined*
# - **this will be bold**
# - `(+ 1 2 3)` <- backticks for code
#
# You may be surprised by *underline* since the same markup is used to
# indicate italics in Markdown. This is likely a tradeoff for compatibility;
# historically, the italic attribute has not been widely supported by
# terminal emulators.
#
# The best way to see the effect of *doc-color* is try the following examples
# in the Janet REPL.
# By default, *doc-color* is enabled.
(print (doc-format "*underline*. **bold**. `(code)`." ))
# Set the dynamic binding to a falsy value to disable doc-format's ANSI
# escape code substition.
(with-dyns [*doc-color* false ]
(print (doc-format "*underline*. **bold**. `(code)`." )))
# N.B.: At the time of writing, no docstrings in the core API take advantage of
# the bold or underline markup As a result, you may not see any difference in
# the doc formatting if your terminal theme uses the same hue for white and
# bright white (a few terminals that I tested on Linux make no distinction
# between the two colors in their default configuration). # note that os/touch does not create a file if it does not yet exist.
(os/touch "foo" )
error: No such file or directory
in os/touch
in _thunk [repl ] (tailcall ) on line 2 , column 1
(apply * [1 2 3 ]) # -> 6
(* (splice [1 2 3 ])) # -> 6
(* ;[1 2 3 ]) # -> 6
(* 1 2 3 ) # -> 6 (get default-peg-grammar :h )
# => '(range "09" "af" "AF") (def a @[1 2 ])
(array/concat a 3 [4 5 ] @[6 7 ] [] @[] 8 )
a # => @[1 2 3 4 5 6 7 8]
(os/cryptorand 1 ) # => @"\n"
(os/cryptorand 1 ) # => @"<"
(os/cryptorand 1 ) # => @"\xC0"
(os/cryptorand 1 ) # => @"\x89"
(os/cryptorand 8 ) # => @"\x87\x13\x99\x95\x10su\e"
(slice [:a :b :c :d ]) # => (:a :b :c :d)
(slice [:a :b :c :d ] 0 ) # => (:a :b :c :d)
(slice [:a :b :c :d ] 1 ) # => (:b :c :d)
(slice [:a :b :c :d ] 3 ) # => (:d)
(slice [:a :b :c :d ] 4 ) # => ()
(slice [:a :b :c :d ] 5 ) # error: index out of range
(slice [:a :b :c :d ] -1 ) # => ()
(slice [:a :b :c :d ] -2 ) # => (:d)
(slice [:a :b :c :d ] -4 ) # => (:b :c :d)
(slice [:a :b :c :d ] -5 ) # => (:a :b :c :d)
(slice [:a :b :c :d ] -6 ) # error: index out of range
(slice [:a :b :c :d ] 0 0 ) # => ()
(slice [:a :b :c :d ] 0 1 ) # => (:a)
(slice [:a :b :c :d ] 0 4 ) # => (:a :b :c :d)
(slice [:a :b :c :d ] -1 -1 ) # => ()
(slice [:a :b :c :d ] -2 -1 ) # => (:d)
(slice [:a :b :c :d ] -5 -1 ) # => (:a :b :c :d)
(slice [:a :b :c :d ] 1 0 ) # => ()
(slice [:a :b :c :d ] 4 0 ) # => ()
(slice [:a :b :c :d ] -1 -2 ) # => ()
(slice [:a :b :c :d ] -1 -5 ) # => ()
# 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 )
(as-> [1 2 3 ] _
(map inc _ )
(sum _ )
(- _ 10 )
(< _ 0 ))
# -> true
# same as
(< (- (sum (map inc [1 2 3 ])) 10 ) 0 )# Run this in a file.
# Notice how each thread gets its own copy of the environment,
# including the global 'counter' variable.
(var counter 0 )
(defn start-thread [name sleep ]
(def chan (ev/thread-chan ))
(ev/spawn-thread
(repeat 10
(ev/sleep sleep )
(++ counter )
(print name " counter is " counter ))
(print name " has finished" )
(ev/give chan "done" ))
chan )
# Spawn two threads that increment counter
(def chan-a (start-thread "Slow thread" 0.8 ))
(def chan-b (start-thread "Fast thread" 0.45 ))
# Wait for both threads to finish
(ev/take chan-a )
(ev/take chan-b )
(print "Global counter is still " counter )(dec 42 ) # => 41
(map dec [1 2 3 ]) # => @[0 1 2]
(let [c0 (ev/chan )
c1 (ev/chan 1 )]
[(ev/capacity c0 ) (ev/capacity c1 )])
# => '(0 1) (buffer/bit (buffer/new-filled 1 48 ) 4 )
# => true