diff --git a/egison.cabal b/egison.cabal
--- a/egison.cabal
+++ b/egison.cabal
@@ -1,5 +1,5 @@
 Name:                egison
-Version:             3.0.7
+Version:             3.0.8
 Synopsis:            An Interpreter for the Programming Language Egison
 Description:         An interpreter for the programming language Egison.
                      A feature of Egison is the strong pattern match facility.
diff --git a/elisp/egison-mode.el b/elisp/egison-mode.el
--- a/elisp/egison-mode.el
+++ b/elisp/egison-mode.el
@@ -14,22 +14,28 @@
      "\\<define\\>"
      "\\<test\\>"
      "\\<execute\\>"
-     
+     "\\<load\\>"
+     "\\<load-file\\>"
+
      "\\<lambda\\>"
-     "\\<macro\\>"
-     "\\<do\\>"
-     "\\<if\\>"
      "\\<let\\>"
      "\\<letrec\\>"
-     "\\<matcher\\>"
-     "\\<algebraic-data-matcher\\>"
+     "\\<if\\>"
+     "\\<apply\\>"
+     "\\<generate-array\\>"
+     "\\<array-size\\>"
+     "\\<array-ref\\>"
+
      "\\<loop\\>"
-     "\\<match-lambda\\>"
      "\\<match\\>"
      "\\<match-all\\>"
+     "\\<matcher\\>"
+     "\\<algebraic-data-matcher\\>"
+     "\\<match-lambda\\>"
      "\\<pattern-function\\>"
-     "\\<generate-array\\>"
 
+     "\\<do\\>"
+
      "\\<undefined\\>"
      "\\<something\\>"
      
@@ -115,18 +121,26 @@
 
 (defun keyword-indent-point (name)
   (cond ((equal "define" name) 2)
+        ((equal "test" name) 2)
+        ((equal "load" name) 2)
+        ((equal "load-file" name) 2)
+        ((equal "execute" name) 2)
         ((equal "lambda" name) 2)
-        ((equal "match-lambda" name) 2)
-        ((equal "macro" name) 2)
         ((equal "let" name) 2)
         ((equal "letrec" name) 2)
-        ((equal "do" name) 2)
+        ((equal "if" name) 2)
+        ((equal "apply" name) 2)
+        ((equal "generate-array" name) 2)
+        ((equal "array-size" name) 2)
+        ((equal "array-ref" name) 2)
+        ((equal "loop" name) 2)
         ((equal "match" name) 2)
         ((equal "match-all" name) 2)
         ((equal "matcher" name) 2)
         ((equal "algebraic-data-matcher" name) 2)
-        ((equal "generate-array" name) 2)
+        ((equal "match-lambda" name) 2)
         ((equal "pattern-function" name) 2)
+        ((equal "do" name) 2)
         ))
 
 (defun egison-indent-line ()
diff --git a/lib/core/collection.egi b/lib/core/collection.egi
--- a/lib/core/collection.egi
+++ b/lib/core/collection.egi
@@ -158,6 +158,15 @@
            ((occurrence a) xs))))
 |#
 
+(define $one-of
+  (lambda [$pred $xs]
+    (match xs (list something)
+      {[<nil> #f]
+       [<cons $x $rs>
+        (if (pred x)
+            #t
+            (one-of pred rs))]})))
+
 (define $size
   (lambda [$xs]
     (match xs (list something)
diff --git a/lib/core/number.egi b/lib/core/number.egi
--- a/lib/core/number.egi
+++ b/lib/core/number.egi
@@ -135,3 +135,11 @@
        [$ [something]
         {[$tgt {(modulo tgt m)}]}]
        })))
+
+(define $primes
+  (letrec {[$next-primes
+            (lambda [$primes1 $n]
+              (if (one-of (lambda [$p] (eq-n? (remainder n p) 0)) primes1)
+                  (next-primes primes1 (+ n 1))
+                  {n @(next-primes {@primes1 n} (+ n 1))}))]}
+    {2 @(next-primes {2} 3)}))
