summaryrefslogtreecommitdiffhomepage
path: root/hy.html.markdown
diff options
context:
space:
mode:
authorSuzane Sant Ana <tetestonaldo@gmail.com>2017-12-31 14:27:06 -0200
committerGitHub <noreply@github.com>2017-12-31 14:27:06 -0200
commit42f9329bb3a028d374d6397991ac48b44064741e (patch)
tree1e75e2b3e122aeb863e3ffa037f6f64c4027fbf8 /hy.html.markdown
parente6b77595f2669d66ac7be43c6e6083cbff80a9a7 (diff)
parent70a36c9bd970b928adde06afb2bd69f6ba8e5d5c (diff)
Merge pull request #1 from adambard/master
update
Diffstat (limited to 'hy.html.markdown')
-rw-r--r--hy.html.markdown44
1 files changed, 41 insertions, 3 deletions
diff --git a/hy.html.markdown b/hy.html.markdown
index 9beaff0c..1287095f 100644
--- a/hy.html.markdown
+++ b/hy.html.markdown
@@ -3,13 +3,14 @@ language: hy
filename: learnhy.hy
contributors:
- ["Abhishek L", "http://twitter.com/abhishekl"]
+ - ["Zirak", "http://zirak.me"]
---
Hy is a lisp dialect built on top of python. This is achieved by
converting hy code to python's abstract syntax tree (ast). This allows
hy to call native python code or python to call native hy code as well
-This tutorial works for hy ≥ 0.9.12
+This tutorial works for hy ≥ 0.9.12, with some corrections for hy 0.11.
```clojure
;; this gives an gentle introduction to hy for a quick trial head to
@@ -89,8 +90,19 @@ True ; => True
(foolists 3) ;=> [3 2]
(foolists 10 3) ;=> [10 3]
+; you can use rest arguments and kwargs too:
+(defn something-fancy [wow &rest descriptions &kwargs props]
+ (print "Look at" wow)
+ (print "It's" descriptions)
+ (print "And it also has:" props))
+
+(something-fancy "My horse" "amazing" :mane "spectacular")
+
+; you use apply instead of the splat operators:
+(apply something-fancy ["My horse" "amazing"] { "mane" "spectacular" })
+
; anonymous functions are created using `fn' or `lambda' constructs
-; which are similiar to `defn'
+; which are similar to `defn'
(map (fn [x] (* x x)) [1 2 3 4]) ;=> [1 4 9 16]
;; Sequence operations
@@ -102,6 +114,8 @@ True ; => True
; slice lists using slice
(slice mylist 1 3) ;=> [2 3]
+; or, in hy 0.11, use cut instead:
+(cut mylist 1 3) ;=> [2 3]
; get elements from a list or dict using `get'
(get mylist 1) ;=> 2
@@ -122,6 +136,22 @@ True ; => True
; a.foo(arg) is called as (.foo a arg)
(.split (.strip "hello world ")) ;=> ["hello" "world"]
+; there is a shortcut for executing multiple functions on a value called the
+; "threading macro", denoted by an arrow:
+(-> "hello world " (.strip) (.split)) ;=> ["hello" "world]
+; the arrow passes the value along the calls as the first argument, for instance:
+(-> 4 (* 3) (+ 2))
+; is the same as:
+(+ (* 4 3) 2)
+
+; there is also a "threading tail macro", which instead passes the value as the
+; second argument. compare:
+(-> 4 (- 2) (+ 1)) ;=> 3
+(+ (- 4 2) 1) ;=> 3
+; to:
+(->> 4 (- 2) (+ 1)) ;=> -1
+(+ 1 (- 2 4)) ;=> -1
+
;; Conditionals
; (if condition (body-if-true) (body-if-false)
(if (= passcode "moria")
@@ -160,6 +190,14 @@ True ; => True
[get-spell (fn [self]
self.spell)]])
+; or, in hy 0.11:
+(defclass Wizard [object]
+ (defn --init-- [self spell]
+ (setv self.spell spell))
+
+ (defn get-spell [self]
+ self.spell))
+
;; do checkout hylang.org
```
@@ -169,6 +207,6 @@ This tutorial is just a very basic introduction to hy/lisp/python.
Hy docs are here: [http://hy.readthedocs.org](http://hy.readthedocs.org)
-Hy's Github repo: [http://github.com/hylang/hy](http://github.com/hylang/hy)
+Hy's GitHub repo: [http://github.com/hylang/hy](http://github.com/hylang/hy)
On freenode irc #hy, twitter hashtag #hylang