mirror of
https://github.com/carp-lang/Carp.git
synced 2024-10-11 20:49:05 +03:00
31 lines
788 B
Plaintext
31 lines
788 B
Plaintext
(Debug.sanitize-addresses)
|
|
|
|
(Project.config "print-ast" true)
|
|
|
|
(deftype Enemy [hp Int
|
|
attack (Fn [Int] Int)])
|
|
|
|
(defn attack [attacker target]
|
|
(let [f @(Enemy.attack attacker)
|
|
new-hp (f @(Enemy.hp &target))]
|
|
(Enemy.set-hp target new-hp)))
|
|
|
|
(deftype SelfReferencer [hp Int
|
|
f (λ [SelfReferencer] SelfReferencer)])
|
|
|
|
(defn change-self [self]
|
|
(SelfReferencer.update-hp self inc))
|
|
|
|
(deftype (GenericFuncMember a) [f (λ [a] a)])
|
|
|
|
(defn main []
|
|
(let-do [enemy (Enemy.init 100 dec)
|
|
hero (Enemy.init 100 dec)
|
|
selfer (SelfReferencer.init 100 change-self)
|
|
gen (GenericFuncMember.init Int.inc)
|
|
]
|
|
(println* &(attack &enemy hero))
|
|
(println* &(change-self selfer))
|
|
(println* &gen)
|
|
))
|