diff --git a/egison.cabal b/egison.cabal
--- a/egison.cabal
+++ b/egison.cabal
@@ -1,5 +1,5 @@
 Name:                egison
-Version:             3.3.16
+Version:             3.3.17
 Synopsis:            Programming language with non-linear pattern-matching against unfree data
 Description:
   An interpreter for Egison, the programming langugage that realized non-linear pattern-matching against unfree data types.
@@ -20,7 +20,7 @@
   <http://www.egison.org/demonstrations/>
   .  
   Egison makes programming dramatically simple.
-  Please help us to make Egison popular.
+  Please try Egison.
 Homepage:            http://www.egison.org
 License:             MIT
 License-file:        LICENSE
diff --git a/hs-src/Language/Egison/Core.hs b/hs-src/Language/Egison/Core.hs
--- a/hs-src/Language/Egison/Core.hs
+++ b/hs-src/Language/Egison/Core.hs
@@ -169,7 +169,7 @@
 
 evalExpr env (ArrayExpr exprs) = do
   refs' <- mapM (newObjectRef env) exprs
-  return . Intermediate . IArray $ Array.listArray (1, toInteger (length exprs)) refs'
+  return . Intermediate . IArray $ Array.listArray (0, toInteger ((length exprs) - 1)) refs'
 
 evalExpr env (HashExpr assocs) = do
   let (keyExprs, exprs) = unzip assocs
@@ -318,8 +318,8 @@
   evalExpr env expr >>= arraySize
   where
     arraySize :: WHNFData -> EgisonM WHNFData
-    arraySize (Intermediate (IArray arr)) = return . Value . toEgison $ snd $ Array.bounds arr
-    arraySize (Value (Array arr))         = return . Value . toEgison $ snd $ Array.bounds arr
+    arraySize (Intermediate (IArray arr)) = return . Value . toEgison $ (snd $ Array.bounds arr) + 1
+    arraySize (Value (Array arr))         = return . Value . toEgison $ (snd $ Array.bounds arr) + 1
     arraySize val                          = throwError $ TypeMismatch "array" val
 
 evalExpr _ SomethingExpr = return $ Value Something
@@ -390,7 +390,7 @@
 generateArray env name sizeExpr expr = do
   size <- evalExpr env sizeExpr >>= fromWHNF >>= return . fromInteger
   elems <- mapM genElem (enumFromTo 1 size)
-  return $ Intermediate $ IArray $ Array.listArray (1, size) elems
+  return $ Intermediate $ IArray $ Array.listArray (0, size - 1) elems
   where
     genElem :: Integer -> EgisonM ObjectRef
     genElem i = do env' <- bindEnv env name $ toInteger i
diff --git a/lib/core/string.egi b/lib/core/string.egi
--- a/lib/core/string.egi
+++ b/lib/core/string.egi
@@ -49,6 +49,16 @@
   (lambda [$xs]
     (eq? xs "")))
 
+(define $S.car
+  (lambda [$xs]
+    (match xs string
+      {[<cons $x _> x]})))
+
+(define $S.cdr
+  (lambda [$xs]
+    (match xs string
+      {[<cons _ $r> r]})))
+
 (define $S.map
   (lambda [$f $xs]
     (pack (map f (unpack xs)))))
