mirror of
https://github.com/carp-lang/Carp.git
synced 2024-10-11 12:37:32 +03:00
Changed signature of 'Array.transform' function.
This commit is contained in:
parent
aee6e713b3
commit
b9f57a9511
@ -116,7 +116,7 @@
|
|||||||
|
|
||||||
(defn map-filter-reduce-stuff []
|
(defn map-filter-reduce-stuff []
|
||||||
(let [stuff [3 5 8 9 10]
|
(let [stuff [3 5 8 9 10]
|
||||||
after (reduce + 0 (transform square (filter even? stuff)))]
|
after (reduce + 0 (transform square &(filter even? stuff)))]
|
||||||
(println (refstr after))))
|
(println (refstr after))))
|
||||||
|
|
||||||
(defn get-last-string [xs] ;; Should be generic preferably...
|
(defn get-last-string [xs] ;; Should be generic preferably...
|
||||||
|
@ -1,2 +1,9 @@
|
|||||||
|
(defn print-char [c]
|
||||||
|
(IO.println &(Char.str c)))
|
||||||
|
|
||||||
(defn to-robber-lang [s]
|
(defn to-robber-lang [s]
|
||||||
)
|
(let [cs (String.chars s)]
|
||||||
|
(let [temp (Array.transform print-char &cs)] ())))
|
||||||
|
|
||||||
|
(defn main []
|
||||||
|
(to-robber-lang "erik"))
|
||||||
|
@ -14,7 +14,7 @@ import Debug.Trace
|
|||||||
templateCopyingMap :: (String, Binder)
|
templateCopyingMap :: (String, Binder)
|
||||||
templateCopyingMap = defineTypeParameterizedTemplate templateCreator path t
|
templateCopyingMap = defineTypeParameterizedTemplate templateCreator path t
|
||||||
where fTy = FuncTy [VarTy "a"] (VarTy "b")
|
where fTy = FuncTy [VarTy "a"] (VarTy "b")
|
||||||
aTy = StructTy "Array" [VarTy "a"]
|
aTy = RefTy (StructTy "Array" [VarTy "a"])
|
||||||
bTy = StructTy "Array" [VarTy "b"]
|
bTy = StructTy "Array" [VarTy "b"]
|
||||||
path = SymPath ["Array"] "transform"
|
path = SymPath ["Array"] "transform"
|
||||||
t = FuncTy [fTy, aTy] bTy
|
t = FuncTy [fTy, aTy] bTy
|
||||||
@ -22,23 +22,27 @@ templateCopyingMap = defineTypeParameterizedTemplate templateCreator path t
|
|||||||
\typeEnv env ->
|
\typeEnv env ->
|
||||||
Template
|
Template
|
||||||
t
|
t
|
||||||
(const (toTemplate "Array $NAME($(Fn [a] b) f, Array a)"))
|
(const (toTemplate "Array $NAME($(Fn [a] b) f, Array* a)"))
|
||||||
(\(FuncTy [(FuncTy [_] _), _] _) ->
|
(\(FuncTy [(FuncTy [_] outputTy), _] _) ->
|
||||||
(toTemplate $ unlines $
|
(toTemplate $ unlines $
|
||||||
[ "$DECL { "
|
[ "$DECL { "
|
||||||
, " Array b;"
|
, " Array b;"
|
||||||
, " b.len = a.len;"
|
, " b.len = a->len;"
|
||||||
, " b.data = CARP_MALLOC(sizeof($b) * a.len);"
|
, " b.data = CARP_MALLOC(sizeof($b) * a->len);"
|
||||||
, " for(int i = 0; i < a.len; ++i) {"
|
, " for(int i = 0; i < a->len; ++i) {"
|
||||||
, " (($b*)b.data)[i] = f((($a*)a.data)[i]); "
|
, if outputTy == UnitTy
|
||||||
|
then " f((($a*)a->data)[i]); "
|
||||||
|
else " (($b*)b.data)[i] = f((($a*)a->data)[i]);"
|
||||||
, " }"
|
, " }"
|
||||||
, " CARP_FREE(a.data);"
|
|
||||||
, " return b;"
|
, " return b;"
|
||||||
, "}"
|
, "}"
|
||||||
]))
|
]))
|
||||||
(\(FuncTy [ft@(FuncTy [insideTypeA] _), arrayTypeA] arrayTypeB) ->
|
(\(FuncTy [ft@(FuncTy [_] _), (RefTy arrayTypeA)] arrayTypeB) ->
|
||||||
[defineFunctionTypeAlias ft, defineArrayTypeAlias arrayTypeA, defineArrayTypeAlias arrayTypeB] ++
|
[defineFunctionTypeAlias ft,
|
||||||
depsForDeleteFunc typeEnv env insideTypeA)
|
defineArrayTypeAlias arrayTypeA,
|
||||||
|
defineArrayTypeAlias arrayTypeB] ++
|
||||||
|
depsForDeleteFunc typeEnv env arrayTypeA ++
|
||||||
|
depsForDeleteFunc typeEnv env arrayTypeB)
|
||||||
|
|
||||||
-- | "Endofunctor Map"
|
-- | "Endofunctor Map"
|
||||||
templateEMap :: (String, Binder)
|
templateEMap :: (String, Binder)
|
||||||
|
@ -137,8 +137,9 @@ initialTypes rootEnv root = evalState (visit rootEnv root) 0
|
|||||||
return $ do okBody <- visitedBody
|
return $ do okBody <- visitedBody
|
||||||
okArgs <- sequence visitedArgs
|
okArgs <- sequence visitedArgs
|
||||||
return (XObj (Lst [defn, nameSymbol, XObj (Arr okArgs) argsi argst, okBody]) i funcTy)
|
return (XObj (Lst [defn, nameSymbol, XObj (Arr okArgs) argsi argst, okBody]) i funcTy)
|
||||||
|
|
||||||
XObj Defn _ _ : _ -> return (Left (InvalidObj Defn xobj))
|
XObj Defn _ _ : (XObj (Sym _) _ _) : (XObj (Arr _) _ _) : [] -> return (Left (NoFormsInBody xobj))
|
||||||
|
XObj Defn _ _ : _ -> return (Left (InvalidObj Defn xobj))
|
||||||
|
|
||||||
-- Def
|
-- Def
|
||||||
def@(XObj Def _ _) : nameSymbol : expression : [] ->
|
def@(XObj Def _ _) : nameSymbol : expression : [] ->
|
||||||
|
Loading…
Reference in New Issue
Block a user