genkio/blog

Reason snippets

Opened this issue · 0 comments

recursively reverse a string

let rec recursion = (word: string) =>
  switch word {
  | "" => ""
  | _ =>
    recursion(String.sub(word, 1, String.length(word) - 1))
    ++ String.sub(word, 0, 1)
  };

sort string

/*this is simply demonstrate opening module, toLowerCase is now available without Js.String*/
open Js.String;

let sortLetters = str =>
  str
  |> Js.String.replaceByRe([%re "/[^'a-zA-Z0-9]+/g"], "")
  |> Js.String.toLowerCase
  |> Js.String.split("")
  |> Js.Array.sortInPlace
  |> Js.Array.join;

factorial

let rec factorial = (n) =>
  n <= 0
  ? 1
  : n * factorial(n - 1);

early return

while (! break^) {
  if (Random.int(10) === 3) {
    break := true
  } else {
    print_endline("hello")
  }
};

convert multi-line string into single line

let singlelineString =
  String.map(
    c =>
      switch (c) {
      | '\n' => ' '
      | _ => c
      },
    multilineString
  );

find item that is less than 4 in a list

[8, 3, 6, 1] 
  |> List.sort(compare)
  |> List.rev
  |> List.find(x => x < 4);

convert list to string using fold_left (equivalent of Array.reduce in JavaScript)

let listOfString = (input: list(string)): string => List.fold_left((acc, x) => acc ++ x, "")(input);

create a list of given elements and length recursively

let rec fill = (~element: 'a, ~length: int): list('a) =>
  if (length <= 0) {
    [];
  } else {
    [element, ...fill(~element, ~length=length-1)];
  };