Scheme (Racket) で Codewars を解く (1)

1 min read読了の目安(約1300字

#Codewars については以下の記事をご覧ください。プログラミングの問題を解くサイトです。

https://qiita.com/javacommons/items/7c473cda7825ab99e08c

今回の問題は「Even or Odd」(偶数か奇数か)という問題です。

https://www.codewars.com/kata/53da3dbb4a5168369a0000fe

【問題原文】Create a function (or write a script in Shell) that takes an integer as an argument and returns "Even" for even numbers or "Odd" for odd numbers.
【問題訳文】一つの整数を引数としてとり、偶数には"Even"を、奇数には"Odd"を返す関数を作ってください。

JavaScriptでの解答
function even_or_odd(number) {
  if ((number % 2) === 0) return "Even";
  return "Odd";
}

「racket-lang even odd」で検索すると・・・
4.3.1 Number Types
・・・という(ドキュメント)ページが見つかりました。

ということで、even? を使って次のような解答を作って見事最終テストにパスしました。

even-or-odd.rkt
#lang racket

(provide even-or-odd)

(define (even-or-odd n)
  (if (even? n) "Even" "Odd"))

すこし解説すると・・・

  • 「#lang ~」という行は Racket では必須で(他のSchemeでは必要ない)、ソースに書かれるプログラミング言語を指定します。通常は「#lang racket」と指定することで Scheme 言語が使えます。
  • 「(provide even-or-odd)」は、下で定義される even-or-odd 関数を、このソースを require するファイルから参照できるようにする宣言です。

以下のようにして require して使います。"even-or-odd.rkt" 内に「(provide even-or-odd)」がないと参照エラーが出ます。

main.rkt
#lang racket

(require "even-or-odd.rkt")

(println (enven-or-odd 3))
(println (enven-or-odd 40))

zenn への投稿テストも兼ねて、小さな記事を書いてみましたw