packages feed

egison-3.3.1: lib/core/string.egi

;;;
;;; String.egi
;;;

(define $string?
  (lambda [$x]
    (if (collection? x)
      (letrec {[$helper (lambda [$cs]
                          (match cs (list something)
                            {[<nil> #t]
                             [<cons $c $rs>
                              (if (char? c)
                                (helper rs)
                                #f)]}))]}
        (helper x))
      #f)))

(define $intersperse
  (lambda [$in $ws]
    (foldl (lambda [$s1 $s2] {@s1 in s2}) {(car ws)} (cdr ws))))

(define $intercalate (compose intersperse concat))

(define $split
  (lambda [$in $ls]
    (match ls (list something)
      {[<join $xs <join ,in $rs>> {xs @(split in rs)}]
       [_ {ls}]})))

(define $split/m
  (lambda [$a $in $ls]
    (match ls (list a)
      {[<join $xs <join ,in $rs>> {xs @(split/m $a in rs)}]
       [_ {ls}]})))

(define $palindrome?
  (lambda [$str]
    (match str string
      {[(loop $i [1 $n]
          <cons $c_i <snoc ,c_i ...>>
          (| <nil> <cons $cm <nil>>))
        #t]
       [_ #f]})))