712 Commits

Author SHA1 Message Date
Bob Tolbert
55a7ab1667 add nil as synonym for None 2013-12-27 13:50:19 -07:00
Bob Tolbert
b2bb161cb0 Merge pull request #391 from olasd/bugfix/apply-method-call
Fix apply with method calls
2013-12-27 11:46:59 -08:00
Abhishek L
141f44c09f Merge branch 'olasd:feature/only-macroexpand-when-needed' 2013-12-27 11:50:39 +05:30
Paul Tagliamonte
1dc26148c6 Merge branch 'master' into paultag/ana/if
Conflicts:
	hy/contrib/anaphoric.hy
2013-12-26 17:57:29 -05:00
Abhishek L
c69c14cc7d contrib/anaphoric: More anaphoric macros added
* hy/contrib/anaphoric.hy: The following anaphoric macros have been
  added
  `ap-reject` : Opposite of ap-filter, yields the elements when a `pred`
  evaluates to false
  `ap-dotimes` : Execute body forms (possibly for side-effects) n times
  with `it` bound from 0 to n-1
  `ap-first` : return the first element that passes predicate
  `ap-last`  : return the last element that passes predicate
  `ap-reduce`: anaphoric form of reduce that allows `acc` and `it` to
  create a function that is applied over the list

* docs/contrib/anaphoric.rst: updated docs to reflect these changes

* tests/__init__.py: updated to explicitly include tests for anaphoric
  macros
2013-12-26 05:57:06 +02:00
Nicolas Dandrimont
81d5f08100 Only call macroexpand when needed
We only need to call macroexpand on HyExpressions,
as this is already guarded in macroexpand_1. This
saves us a few funcalls.
2013-12-26 03:00:24 +01:00
Paul Tagliamonte
6172b60e75 Add anaphoric if statement 2013-12-25 12:14:26 -05:00
Nicolas Dandrimont
cfbc792957 Fix apply with method calls
Apply didn't work on method calls (i.e. `(apply .foo [bar]) broke).
This slipped through because there were no tests of this behavior. I noticed
it while trying to merge the `meth` fixes.
2013-12-23 21:02:45 +01:00
Foxboron
c9fdd40c9f Hy reader macros #377
Added first iteration of reader macros
Refactored defmacro and defreader
Added test inn hy/tests/lex/test_lex.py
Added new test in hy/tests/native/tests
Added new test in hy/tests/macros.

changed the error given in the dispatch macro and added some handling for missing symbol and invalid characters
2013-12-23 14:33:51 +01:00
Nicolas Dandrimont
ec2b5fb7ad Merge branch 'kwapply-macro' of https://github.com/Willyfrog/hy into Willyfrog-kwapply-macro
Conflicts:
	hy/core/language.hy
	hy/core/macros.hy
	tests/native_tests/language.hy
2013-12-22 20:03:00 +01:00
Nicolas Dandrimont
ceb612f385 Merge branch 'fix/arith-identity' of https://github.com/theanalyst/hy into theanalyst-fix/arith-identity 2013-12-22 19:32:10 +01:00
Nicolas Dandrimont
799c39ffad Implement del
Closes #385.
2013-12-22 20:26:57 +02:00
Nicolas Dandrimont
0f96c24965 Make _storeize generic
This allows to change an expression's context to something else than ast.Store if needed.
2013-12-22 20:26:57 +02:00
Paul Tagliamonte
cccf90c702 Merge branch 'master' into pr/374 2013-12-22 13:22:39 -05:00
Bob Tolbert
3204c2a574 Fix for readline REPL problem Darwin Python3
On OS X Mavericks, the Hy REPL doesn't allow the 'b' character when
running with Python 3.3. This appears to be a common problem
for Darwin and readline as mentioned in this post

http://superuser.com/questions/297527/cant-type-the-b-letter-in-python-shell-in-os-x
2013-12-20 07:23:35 -07:00
Bob Tolbert
c80e3c75a0 Adding automatic gensym macro
Adding to the manual gensym for macros are 2 new
macros, but very literal from the CL in
letoverlambda.

The first is the (with-gensyms ...) macro that
can generate a small set of syms for a macro. Works
something like:

(defmacro adder2 [A B]
  (with-gensyms [a b]
    `(let [[~a ~A] [~b ~B]]
       (+ ~a ~b))))

and ~a and ~b will be replaced with (gensym "a") and
(gensym "b") respectively.

Then the final macro is a new defmacro that will automatically
replace symbols prefaced with "g!" with a new gensym based on the
rest of the symbol. So in this final version of 'nif':

(defmacro/g! nif4 (expr pos zero neg)
  `(let [[~g!result ~expr]]
     (cond [(pos? ~g!result) ~pos]
           [(zero? ~g!result) ~zero]
           [(neg? ~g!result) ~neg])))

all uses of ~g!result will be replaced with (gensym "result").
2013-12-15 18:47:46 -07:00
Bob Tolbert
f5d88bb108 gensym in Hy
Simple implementation of gensym in Hy.

Returns a new HySymbol.

Usable in macros like:

(defmacro nif [expr pos zero neg]
  (let [[g (gensym)]]
    `(let [[~g ~expr]]
       (cond [(pos? ~g) ~pos]
             [(zero? ~g) ~zero]
             [(neg? ~g) ~neg]))))

This addresses all the general comments about (gensym), and doesn't
try to implement "auto-gensym" yet. But clearly the macro approach
instead of the pre-processor approach (as described in the
letoverlambda (http://letoverlambda.com/index.cl/guest/chap3.html#sec_5)
is the way to go
2013-12-15 12:36:36 -07:00
Abhishek L
f72ff53f41 Operators + and * work without args, fixes #372
Like other lisps, operators `+` and `*` return their identity values
when called with no arguments. Also with a single operand they return
the operand.

This fixes #372
2013-12-16 00:04:43 +05:30
Guillermo Vaya
aeb0cd4c72 Fixed docstring 2013-12-09 11:49:17 +01:00
Guillermo Vaya
f913c2aa8c meth wasn't accepting correctly its parameters
Now also accepts more than 1 statement in the code part of the macro
refactored to use only 1 codebase (no more route != route-with-macros)
2013-12-09 11:48:13 +01:00
Abhishek L
948e6d34c7 Merge branch master onto pr/284
Conflicts:
	hy/core/language.hy
2013-12-06 20:07:39 +05:30
Morten Linderud
699396b5a3 Merge pull request #358 from theanalyst/feature/macros-none
Allow macros to return None, fixes #357
2013-12-06 03:53:44 -08:00
Abhishek L
f1c68bd51a Allow macros to return None, fixes #357
Allows Hy macros to return None, to test this

  (defmacro foo [])
  (foo)

Should work now
2013-12-06 00:27:45 +05:30
Nicolas Dandrimont
cc147512fc Merge branch 'paultag/feature/support-question-marks' of https://github.com/paultag/hy into paultag-paultag/feature/support-question-marks
Conflicts:
	hy/core/language.hy
2013-12-05 19:28:59 +01:00
Nicolas Dandrimont
f4f0972e6e Merge branch 'master' of https://github.com/hcarvalhoalves/hy into hcarvalhoalves-master 2013-12-05 19:10:34 +01:00
Nicolas Dandrimont
f0a9149383 Merge branch 'string-cast' of https://github.com/Willyfrog/hy into Willyfrog-string-cast 2013-12-05 19:04:22 +01:00
Nicolas Dandrimont
f9a1995be8 Make HyObject.replace more resilient
This makes it work on quoted objects
2013-12-04 03:25:33 +02:00
Morten Linderud
c933f703ff Merge pull request #349 from hcarvalhoalves/fix-osx-complete
Fix REPL completions on OS X
2013-12-02 21:01:35 -08:00
Henrique Carvalho Alves
1b7d7bcef7 Fix REPL completions on OS X 2013-12-03 01:07:05 -02:00
Paul Tagliamonte
fd60a864eb Translate all foo? -> is_foo. Close #334
The fancypants Hy award goes to Nick for coming up with the quoted
symbol hack for exports. This broke with foo?, since the export string
needs to be is_foo, but using a quoted string will pick up the change
due to it being a Symbol.

Mad clown love for that, @olasd.
2013-12-01 15:03:31 -05:00
J Kenneth King
0b6d047239 Remove james@agentultra.com from copyright in core/macros.py 2013-11-30 10:35:57 -05:00
agentultra
5753fc0789 Fix typo in ap-map-when 2013-11-30 10:30:42 -05:00
agentultra
77db779019 Fix typo in ap-each 2013-11-30 10:29:41 -05:00
Henrique Carvalho Alves
62bc86a0b5 Fix sys.argv to reflect default Python behaviour
By default, calling the Python REPL without arguments causes
sys.argv to be a non-empty list with an empty string, and some
modules (e.g., pyNN) rely on that.
2013-11-29 23:51:41 -02:00
agentultra
cb6889314a Add documentation and doc strings 2013-11-29 19:59:20 -05:00
agentultra
179017b9bd Move anaphoric macros to contrib module 2013-11-28 23:53:02 -05:00
agentultra
20df6a5532 Make --map-when accept a predicate function instead of a form
This makes it look a little cleaner:

    (list (--map-when odd? (* it 3) [1 2 3 4 5]))
2013-11-28 16:45:07 -05:00
agentultra
8e44cc3d9a Add --each-while and --map-when
A couple of more macros:

    hy> (--each-while [1 2 3 4 5] (< it 3) (print it))
    1
    2
    3
    hy>

```--each-while``` continues to evaluate the body form while the
predicate form is true for each element in the list.

```--map-when``` uses a predicate form to determine when to apply the
map form upon the element in the list:

    hy> (list (--map-when (even? it) (* it 3) [1 2 3 4]))
    [1, 6, 3, 12]
2013-11-28 16:15:23 -05:00
agentultra
2106a0e5d4 Add anaphoric versions of map, filter, and foreach
Anaphoric macros reduce the need to specify a lambda by binding a
special name in a form passed as a parameter to the macro. This allows
you to write more concise code:

    (= (list (--filter (even? it) [1 2 3 4])) [2 4])

This patch just adds a few basic ones. Other forms that can be
converted to anaphoric versions include reduce, remove, enumerate,
etc.
2013-11-28 13:23:09 -05:00
Paul Tagliamonte
8c172c9c7e Prepare 0.9.11 2013-11-12 21:59:34 -05:00
Guillermo Vaya
687f2c790f Adding olasd's improvements 2013-11-03 11:11:21 +01:00
Guillermo Vaya
0f525a691d removed unnecessary import 2013-11-03 11:11:11 +01:00
Nicolas Dandrimont
59e51166fb Allow calling kwapply with mixed names and dicts 2013-11-02 20:50:21 +01:00
Nicolas Dandrimont
83bb1513db Make apply api-compatible with python (args is not mandatory) 2013-11-02 20:50:20 +01:00
Guillermo Vaya
f5754b404e Define kwapply as a macro
Define apply if python3
Added apply tests
2013-11-02 18:18:16 +01:00
Nicolas Dandrimont
06628dbba5 Fully qualify the HyTypeError reference
No need to import it explicitly, the hy module is available everywhere.
2013-10-17 18:53:43 +02:00
Sean B. Palmer
c34db29ba8 Fixed --name-- scope problem using ugly inspect code 2013-10-11 14:30:55 +01:00
Sean B. Palmer
defccc6853 Added macroexpand-1 2013-10-11 13:50:10 +01:00
Sean B. Palmer
a34db9119b Add macroexpand to core/language.hy 2013-10-11 11:55:14 +01:00
Guillermo Vaya
34275fab60 Added type coercing to the right integer for the platform 2013-10-11 08:35:32 +02:00