見出し画像

【Clojure】基本文法【言語習得への道】

https://www.jdoodle.com/

コメント

プログラミングでは、コード中にコメントを書くことができます。
Clojureでは文頭に「;」を書くことで、コメントとして扱われます。
コメント扱いされた文は実行されることはありません。

; この行はコメントです.
; (println "コメントです")

(println "Hello, World")
(println "Not, Comment")

; 実行結果
; Hello, World
; Not, Comment

変数

defを使って変数を定義しています。

;; データ型→初期値
(def text "text")

;; データ型と初期値を同時
(def Text "Text")

;; 出力
(println text)
(println Text)

;; Textを上書き
(def Text "TEXT")
(println Text)

;; 実行結果
;; text
;; Text
;; TEXT

長い変数名

; _で繋ぐ
(def text_text "text")

; -で繋ぐ
(def Text-Text "Text")

; 出力
(println text_text)
(println Text-Text)

; 大文字で繋ぐ
(def TextText "TEXT")
(println TextText)

; 実行結果
; text
; Text
; TEXT

関数

(defn string00 []
  (let [text "text"
        Text "Text"]
    (println text)
    (println Text))

  (let [helloworldmessage "Hello, World"
        HelloWorldMessage "Hello, World"]
    (println helloworldmessage)
    (println HelloWorldMessage)))

(string00)

;; 実行結果
;; text
;; Text
;; Hello, World
;; Hello, World

関数の宣言

(defn string00 []
  • defnは関数を定義するためのキーワードです。

  • string00は関数名です。

  • []は引数リストを示します。この場合、引数はありません。

関数の本体

(let [text "text"
      Text "Text"]
  (println text)
  (println Text))

(let [helloworldmessage "Hello, World"
      HelloWorldMessage "Hello, World"]
  (println helloworldmessage)
  (println HelloWorldMessage)))
  • letを使ってローカル変数を定義します。letの後に続くベクター[]内で変数名とその値をペアで指定します。

  • printlnを使って変数の値をコンソールに出力します。

関数の呼び出し

(string00)
  • 定義した関数string00を呼び出します。

  • この呼び出しにより、関数string00の本体が実行され、指定された出力がコンソールに表示されます。

文字列

基本文法

;; 文字列
(defn HelloWorld [str1]
  (let [text str1]
    "Hello World"))

;; 実行
(def echo-str (HelloWorld "mass"))
(println echo-str)
;; Hello World

;; 文字列連結
(defn HelloWorld2 [str1]
  (let [text (str "Hello World" str1)]
    text))

;; 実行
(def echo-str (HelloWorld2 "mass"))
(println echo-str)
;; Hello Worldmass

;; 改行
(defn HelloWorld3 [str1]
  (let [text (str "Hello World\n" str1)]
    text))

;; 実行
(def echo-str (HelloWorld3 "mass"))
(println echo-str)
;; Hello World
;; mass

コードの解説

文字列を返す関数 `HelloWorld`

(defn HelloWorld [str1]
  (let [text str1]
    "Hello World"))
  • `HelloWorld`という関数を定義しています。この関数は引数として文字列 `str1` を受け取ります。

  • `let`を使ってローカル変数 `text` に `str1` を代入していますが、実際には使われていません。

  • 関数は常に `"Hello World"` という文字列を返します。

関数 `HelloWorld` の実行

(def echo-str (HelloWorld "mass"))
(println echo-str)
  • `HelloWorld` 関数を `"mass"` という引数で呼び出し、その結果を `echo-str` に代入します。

  • `println` を使って `echo-str` の内容を出力します。出力結果は `"Hello World"` です。

文字列連結を行う関数 `HelloWorld2`

(defn HelloWorld2 [str1]
  (let [text (str "Hello World" str1)]
    text))
  • `HelloWorld2` という関数を定義しています。この関数も引数として文字列 `str1` を受け取ります。

  • `let` を使ってローカル変数 `text` に `"Hello World"` と `str1` を連結した文字列を代入します。

  • 関数は `text` を返します。

(def i 5)
(def a (str i)) ; 文字列へ変換
(println (str "5以下:" a)) ; 文字列の結合

整数を文字列に変換

整数を文字列に変換し、文字列を結合する方法を示しています。

(def i 5)
(def a (str i)) ; 文字列へ変換
(println (str "5以下:" a)) ; 文字列の結合
(println (str "5以下:" i)) ; OK
(println (format "5以下:%s, %s, %s" i (- i 1) a))
  1. (def i 5):

    • 変数`i`を定義し、整数`5`を代入しています。

  2. (def a (str i)):

    • 変数`a`を定義し、`i`を文字列に変換して代入しています。`str`関数は引数を文字列に変換します。

  3. (println (str "5以下:" a)):

    • `println`関数を使って、文字列を標準出力に出力します。`str`関数を使って`"5以下:"`と`a`を結合しています。

  4. (println (str "5以下:" i)):

    • 同様に、`i`を`str`関数で文字列に変換し、結合して出力しています。

  5. (println (format "5以下:%s, %s, %s" i (- i 1) a)):

    • `format`関数を使って、フォーマットされた文字列を出力します。`%s`は文字列のプレースホルダで、`i`、`(- i 1)`(`i`から1を引いた値)、および`a`の値がここに挿入されます。

このコードは、整数`5`を文字列に変換して結合し、異なる方法で出力する例を示しています。

数値

基本的な算術演算と文字列の出力を行います。

(println 42)
(println (+ 42 21)) ; 足し算
(println (- 42 21)) ; 引き算
(println (* 42 2))  ; かけ算
(println (/ 42 21)) ; 割り算
(println "42 + 21") ; 文字列

;; 実行結果
;; 42
;; 63
;; 21
;; 84
;; 2.0
;; 42 + 21

数値の出力

(println 42)

`println`関数を使って、数値`42`を標準出力に表示します。

足し算の結果を出力

(println (+ 42 21)) ; 足し算

`(+ 42 21)`は`42 + 21`の計算を行い、その結果を`println`関数で表示します。

引き算の結果を出力

(println (- 42 21)) ; 引き算

`(- 42 21)`は`42 - 21`の計算を行い、その結果を`println`関数で表示します。

かけ算の結果を出力

(println (* 42 2))  ; かけ算

`(* 42 2)`は`42 * 2`の計算を行い、その結果を`println`関数で表示します。

割り算の結果を出力

(println (/ 42 21)) ; 割り算

`(/ 42 21)`は`42 / 21`の計算を行い、その結果を`println`関数で表示します。

文字列の出力

(println "42 + 21") ; 文字列

`println`関数を使って、文字列`"42 + 21"`を標準出力に表示します。

リスト型

配列の操作を行います。

(let [ary ["a" "b" "c" "d" "e" "f"]]
    (println ary (count ary))
    (println (nth ary 0))
    (println (nth ary 5))
    (println (nth ary (dec (count ary))))

(let [results [(nth ary 0) (nth ary 2)]]
     (println results))))

;; 実行結果
;; ["a" "b" "c" "d" "e" "f"] 6
;; a
;; f
;; f
;; ["a" "c"]

配列の初期化

(let [ary ["a" "b" "c" "d" "e" "f"]]

`let`を使って、文字列のベクター`ary`を初期化します。

配列とその長さを出力

    (println ary (count ary))

`println`関数を使って、`ary`ベクターとその長さを表示します。

配列の特定の要素を出力

    (println (nth ary 0))
    (println (nth ary 5))
    (println (nth ary (dec (count ary))))

`nth`関数を使って、`ary`ベクターの特定の要素を表示します。`dec`関数は引数の値を1減らします。

新しい配列 results を作成し、特定の要素をコピー

(let [results [(nth ary 0) (nth ary 2)]]

`let`を使って、`ary`ベクターの特定の要素をコピーして新しいベクター`results`を作成します。

results 配列を出力

     (println results))))

`println`関数を使って、`results`ベクターを表示します。

for文

数値と配列を使った`for`ループの例を示しています。

;; 数字のfor文
(println "数字のfor文")
(doseq [x (range 0 7)]
(println x))

(let [ary ["a" "b" "c" "d" "e" "f"]]
    (println "リスト:" ary)
    (println "リストのfor文:" (count ary))
    
    (println "リストのfor文")
    (doseq [x ary]
      (println x))))

;; 実行結果
;; 数字のfor文
;; 0
;; 1
;; 2
;; 3
;; 4
;; 5
;; 6
;; リスト: ["a" "b" "c" "d" "e" "f"]
;; リストのfor文: 6
;; リストのfor文
;; a
;; b
;; c
;; d
;; e
;; f

数字のfor文

(println "数字のfor文")
(doseq [x (range 0 7)]
  (println x))

`println`関数を使って、"数字のfor文"という文字列を表示します。`doseq`を使って、0から6までの数字を出力しています。`range`関数は指定された範囲の数値を生成します。

配列の初期化

(let [ary ["a" "b" "c" "d" "e" "f"]]

`let`を使って、文字列のベクター`ary`を初期化します。

リストの出力

  (println "リスト:" ary)
  (println "リストのfor文:" (count ary))

`println`関数を使って、`ary`ベクターとその長さを表示します。`count`関数はベクターの要素数を返します。

リストのfor文

  (println "リストのfor文")
  (doseq [x ary]
    (println x)))

`println`関数を使って、"リストのfor文"という文字列を表示します。`doseq`を使って、`ary`ベクターの各要素を出力します。`println`関数を使って、各要素を表示します。

if文

以下のコードは、0から10までの数値をループし、それぞれの数値が5以下かどうかを判定して出力するものです。

;; 0から10までの範囲でループを実行
(doseq [i (range 0 11)]
    (when (<= i 5)
      (println (<= i 5))  ;; 条件が真であることを表示
      (println (str "5以下:" i))))  ;; "5以下:"とiの値を表示

;; 0から10までの範囲で再度ループを実行
(doseq [i (range 0 11)]
    (when (not (<= i 5))
      (println (<= i 5))  ;; 条件が偽であることを表示
      (println (str "5以上:" i)))))  ;; "5以上:"とiの値を表示
  
  
; true
; 5以下:0
; true
; 5以下:1
; true
; 5以下:2
; true
; 5以下:3
; true
; 5以下:4
; true
; 5以下:5
; false
; 5以上:6
; false
; 5以上:7
; false
; 5以上:8
; false
; 5以上:9
; false
; 5以上:10

0から10までの範囲でループを実行

(doseq [i (range 0 11)]
    (when (<= i 5)
      (println (<= i 5))  ;; 条件が真であることを表示
      (println (str "5以下:" i))))  ;; "5以下:"とiの値を表示

`doseq`を使って、0から10までの範囲でループを実行します。`range`関数は指定された範囲の数値を生成します。`when`は条件が真の場合にのみ実行されます。`<=`は比較演算子で、`i`が5以下の場合に真となります。`println`関数を使って、条件が真であることと、"5以下:"と`i`の値を表示します。

0から10までの範囲で再度ループを実行

(doseq [i (range 0 11)]
    (when (not (<= i 5))
      (println (<= i 5))  ;; 条件が偽であることを表示
      (println (str "5以上:" i)))))  ;; "5以上:"とiの値を表示

`doseq`を使って、0から10までの範囲で再度ループを実行します。`range`関数は指定された範囲の数値を生成します。`when`は条件が真の場合にのみ実行されます。`not`は論理否定演算子で、`i`が5以下でない場合に真となります。`println`関数を使って、条件が偽であることと、"5以上:"と`i`の値を表示します。



いいなと思ったら応援しよう!