1
0
mirror of https://github.com/janet-lang/janet synced 2024-11-24 17:27:18 +00:00

Update core.janet

This commit is contained in:
Calvin Rose 2018-12-23 14:13:27 -05:00
parent ac9935c95f
commit 55c091e898
2 changed files with 35 additions and 3 deletions

View File

@ -741,7 +741,7 @@
(defmacro -> (defmacro ->
"Threading macro. Inserts x as the second value in the first form "Threading macro. Inserts x as the second value in the first form
in form, and inserts the modified firsts form into the second form in forms, and inserts the modified first form into the second form
in the same manner, and so on. Useful for expressing pipelines of data." in the same manner, and so on. Useful for expressing pipelines of data."
[x & forms] [x & forms]
(defn fop [last n] (defn fop [last n]
@ -754,7 +754,7 @@
(defmacro ->> (defmacro ->>
"Threading macro. Inserts x as the last value in the first form "Threading macro. Inserts x as the last value in the first form
in form, and inserts the modified firsts form into the second form in forms, and inserts the modified first form into the second form
in the same manner, and so on. Useful for expressing pipelines of data." in the same manner, and so on. Useful for expressing pipelines of data."
[x & forms] [x & forms]
(defn fop [last n] (defn fop [last n]
@ -765,6 +765,38 @@
(tuple/slice parts 0)) (tuple/slice parts 0))
(reduce fop x forms)) (reduce fop x forms))
(defmacro -?>
"Short circuit threading macro. Inserts x as the last value in the first form
in forms, and inserts the modified first form into the second form
in the same manner, and so on. The pipeline will return nil
if an intermediate value is nil.
Useful for expressing pipelines of data."
[x & forms]
(defn fop [last n]
(def [h t] (if (= :tuple (type n))
[tuple n.0 (array/slice n 1)]
[tuple n @[]]))
(def sym (gensym))
(def parts (array/concat @[h sym] t))
~(let [,sym ,last] (if ,sym ,(tuple/slice parts 0))))
(reduce fop x forms))
(defmacro -?>>
"Threading macro. Inserts x as the last value in the first form
in forms, and inserts the modified first form into the second form
in the same manner, and so on. The pipeline will return nil
if an intermediate value is nil.
Useful for expressing pipelines of data."
[x & forms]
(defn fop [last n]
(def [h t] (if (= :tuple (type n))
[tuple n.0 (array/slice n 1)]
[tuple n @[]]))
(def sym (gensym))
(def parts (array/concat @[h] t @[sym]))
~(let [,sym ,last] (if ,sym ,(tuple/slice parts 0))))
(reduce fop x forms))
(defn partial (defn partial
"Partial function application." "Partial function application."
[f & more] [f & more]

View File

@ -386,7 +386,7 @@ static const JanetReg cfuns[] = {
"(fiber/new func [,sigmask])\n\n" "(fiber/new func [,sigmask])\n\n"
"Create a new fiber with function body func. Can optionally " "Create a new fiber with function body func. Can optionally "
"take a set of signals to block from the current parent fiber " "take a set of signals to block from the current parent fiber "
"when called. The mask is specified as symbol where each character " "when called. The mask is specified as a symbol where each character "
"is used to indicate a signal to block. The default sigmask is :y. " "is used to indicate a signal to block. The default sigmask is :y. "
"For example, \n\n" "For example, \n\n"
"\t(fiber/new myfun :e123)\n\n" "\t(fiber/new myfun :e123)\n\n"