Skip to content

Commit e99215c

Browse files
committedDec 8, 2011
making update operators (e.g. +=) first-class functions. for issue #249
1 parent dde9519 commit e99215c

File tree

2 files changed

+40
-20
lines changed

2 files changed

+40
-20
lines changed
 

‎j/operators.j

+19
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,25 @@ min(x, y) = x < y ? x : y
2525

2626
## definitions providing basic traits of arithmetic operators ##
2727

28+
+=(x,y) = x+y
29+
-=(x,y) = x-y
30+
*=(x,y) = x*y
31+
.*=(x,y) = x.*y
32+
/=(x,y) = x/y
33+
./=(x,y) = x./y
34+
//=(x,y) = x//y
35+
\=(x,y) = x\y
36+
.\=(x,y) = x.\y
37+
^=(x,y) = x^y
38+
.^=(x,y) = x.^y
39+
%=(x,y) = x%y
40+
|=(x,y) = x|y
41+
&=(x,y) = x&y
42+
$=(x,y) = x$y
43+
<<=(x,y) = x<<y
44+
>>=(x,y) = x>>y
45+
>>>=(x,y) = x>>>y
46+
2847
+() = 0
2948
*() = 1
3049
&() = error("zero-argument & is ambiguous")

‎src/julia-syntax.scm

+21-20
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@
9292

9393
(define (expand-update-operator op lhs rhs)
9494
(let ((e (remove-argument-side-effects lhs)))
95-
`(block ,@(cdr e) (= ,(car e) (call ,op ,(car e) ,rhs)))))
95+
`(block ,@(cdr e)
96+
(= ,(car e) (call ,op ,(car e) ,rhs)))))
9697

9798
; (a > b > c) => (&& (call > a b) (call > b c))
9899
(define (expand-compare-chain e)
@@ -866,25 +867,25 @@
866867
,body))))))
867868

868869
; update operators
869-
(pattern-lambda (+= a b) (expand-update-operator '+ a b))
870-
(pattern-lambda (-= a b) (expand-update-operator '- a b))
871-
(pattern-lambda (*= a b) (expand-update-operator '* a b))
872-
(pattern-lambda (.*= a b) (expand-update-operator '.* a b))
873-
(pattern-lambda (/= a b) (expand-update-operator '/ a b))
874-
(pattern-lambda (./= a b) (expand-update-operator './ a b))
875-
(pattern-lambda (//= a b) (expand-update-operator '// a b))
876-
(pattern-lambda (.//= a b) (expand-update-operator '.// a b))
877-
(pattern-lambda (|\\=| a b) (expand-update-operator '|\\| a b))
878-
(pattern-lambda (|.\\=| a b) (expand-update-operator '|.\\| a b))
879-
(pattern-lambda (^= a b) (expand-update-operator '^ a b))
880-
(pattern-lambda (.^= a b) (expand-update-operator '.^ a b))
881-
(pattern-lambda (%= a b) (expand-update-operator '% a b))
882-
(pattern-lambda (|\|=| a b) (expand-update-operator '|\|| a b))
883-
(pattern-lambda (&= a b) (expand-update-operator '& a b))
884-
(pattern-lambda ($= a b) (expand-update-operator '$ a b))
885-
(pattern-lambda (<<= a b) (expand-update-operator '<< a b))
886-
(pattern-lambda (>>= a b) (expand-update-operator '>> a b))
887-
(pattern-lambda (>>>= a b) (expand-update-operator '>>> a b))
870+
(pattern-lambda (+= a b) (expand-update-operator '+= a b))
871+
(pattern-lambda (-= a b) (expand-update-operator '-= a b))
872+
(pattern-lambda (*= a b) (expand-update-operator '*= a b))
873+
(pattern-lambda (.*= a b) (expand-update-operator '.*= a b))
874+
(pattern-lambda (/= a b) (expand-update-operator '/= a b))
875+
(pattern-lambda (./= a b) (expand-update-operator './= a b))
876+
(pattern-lambda (//= a b) (expand-update-operator '//= a b))
877+
(pattern-lambda (.//= a b) (expand-update-operator './/= a b))
878+
(pattern-lambda (|\\=| a b) (expand-update-operator '|\\=| a b))
879+
(pattern-lambda (|.\\=| a b) (expand-update-operator '|.\\=| a b))
880+
(pattern-lambda (^= a b) (expand-update-operator '^= a b))
881+
(pattern-lambda (.^= a b) (expand-update-operator '.^= a b))
882+
(pattern-lambda (%= a b) (expand-update-operator '%= a b))
883+
(pattern-lambda (|\|=| a b) (expand-update-operator '|\|=| a b))
884+
(pattern-lambda (&= a b) (expand-update-operator '&= a b))
885+
(pattern-lambda ($= a b) (expand-update-operator '$= a b))
886+
(pattern-lambda (<<= a b) (expand-update-operator '<<= a b))
887+
(pattern-lambda (>>= a b) (expand-update-operator '>>= a b))
888+
(pattern-lambda (>>>= a b) (expand-update-operator '>>>= a b))
888889

889890
;; colon
890891
;;(pattern-lambda (: a (-/ :)) `(call (top RangeFrom) ,a 1))

0 commit comments

Comments
 (0)
Please sign in to comment.