Juliaで学ぶプログラミング入門 対話モード（REPL）

# 対話モード（REPL）とは

Julia REPL (Read-Eval-Print Loop)は、Juliaプログラミング言語の対話型実行環境です。 REPLは、ユーザーが入力したJuliaコードを受け取り、評価し、結果を出力するという、逐次実行処理が行われます。 REPLを使用することで、Juliaプログラムをインタラクティブに実行して、アイデアを素早くテストすることができます。

Julia以外のプログラミング言語でも多くはこれが用意されています。

juliaでは次のモード等があります。
1. Juliaモード
1. ヘルプモード
1. パッケージモード
1. シェルモード
1. サーチモード

## 起動
実行するにはコマンドラインでjuliaを実行します。（julia.exeを実行)
以下のような画面が表示されます。

```julia
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: https://docs.julialang.org
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.5.3 (2021-03-31)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |
```
この画面では、Juliaのバージョン情報が表示され、REPLで使用するためのプロンプト（「julia>」）が表示されます。
（※不都合がない場合最新バージョンを起動させてください）


## juliaモード
初期画面がjuliaモード（＝juliaのプログラムコマンドを実行するモード）です。
この画面で、Juliaコードを入力し、実行することができます。
以下は、プロンプトで入力した実行例です。

```julia
julia> 2 + 2
4

julia> x = 5
5

julia> x + 3
8
```
この例では、2つの数値を足し合わせる、変数に値を代入する、そして変数と数値を足し合わせる操作を行いました。 入力されたJuliaコードが評価され、結果が出力されるというREPLの基本的な挙動が示されています。

 また、結果が出力されるのは、REPLに入力された最後の命令の結果であるため、REPLのプロンプトが表示されるまでに実行された命令の結果は出力されません。


```julia
julia> a=1;b=2;a+b
3
```
この例では３つの命令を１行で行っています。aやｂの入力結果は出力せず、最後の命令であるa+bの結果を出力しています。
(;は命令の区切りです）

## ヘルプモード
Julia REPLには、「ヘルプモード」があります。 ヘルプモードでは、REPLに「?」を入力することで、Juliaの基本的な操作方法やコマンドの使い方などを確認することができます。

例えば、次のように、「?」をREPLに入力すると、Juliaの基本的な操作方法が表示されます。

```julia
# julia>に「？」を入力した直後
help?> 

```
### 関数や型の情報を示す

このhelpモードで関数名を入力するその情報が示されます。

以下はfunctionを入力した例です。
```julia
help?> function
search: function Function functionloc @functionloc @cfunction ComposedFunction

  function

  Functions are defined with the function keyword:

  function add(a, b)
      return a + b
  end

  Or the short form notation:

  add(a, b) = a + b

  The use of the return keyword is exactly the same as in other languages, but
  is often optional. A function without an explicit return statement will
  return the last expression in the function body.
```



### 記号の入力方法を確認する
 ヘルプモードでは記号の入力方法を確認することもできます。
以下は立方根の記号「∛」を入力した例です。
```julia
help?> ∛
"∛" can be typed by \cbrt<tab>

search: ∛

  cbrt(x::Real)

  Return the cube root of x, i.e. x^{1/3}. Negative values are accepted
  (returning the negative real root when x < 0).

  The prefix operator ∛ is equivalent to cbrt.

  Examples
  ≡≡≡≡≡≡≡≡≡≡

  julia> cbrt(big(27))
  3.0
  
  julia> cbrt(big(-27))
  -3.0
```
上記では「"∛" can be typed by \cbrt<tab>」と入力方法が示され、つづいて立方根の説明が示されています。

１つヘルプを表示したあとは、ヘルプモードを終了し、通常のREPLモードに戻ります。
また「deleteキー」を入力することでも、ヘルプモードを終了し、通常のREPLモードに戻ることができます。
```julia
help?> (delete-key)
julia>
```


Julia REPLのヘルプモードは、Juliaの操作方法やコマンドの使い方などを確認するために便利な機能です。 また、Juliaには多くの関数が用意されており、その中から必要なものを探すことが難しい場合にも、ヘルプモードを使用することで簡単に情報を取得することができます。

## パッケージモード
Juliaパッケージを操作するためのモードです。 このモードでは、REPLに入力されたJuliaコードが、Juliaパッケージを操作するための命令として解釈されます。

パッケージモードでは、REPLに「]」を入力することで、Juliaパッケージを操作するための命令が実行できます。

例えば、次のように、「]」をREPLに入力すると、「pkg>」プロンプトが表示されます。

```julia
julia> ]
pkg>
```
この状態では、Juliaパッケージを操作するための命令を入力することができます。

例えば、「add パッケージ名」と入力すると、指定したパッケージをインストールします。
```julia
pkg> add DataFrames
```
また、「status」と入力すると、現在インストールされているパッケージの一覧が表示されます。
```julia
pkg> status
     Status `~/.julia/environments/v1.7/Project.toml`
  [336ed68f] CSV v0.10.4
  [861a8166] Combinatorics v1.0.2
  [a93c6f00] DataFrames v1.3.4
  [0c46a032] DifferentialEquations v7.2.0
  [587475ba] Flux v0.13.8
  [92fee26a] GZip v0.5.1
  [c43c736e] Genie v5.2.2
  [e115e502] GenieAuthentication v2.0.0
  [cd3eb016] HTTP v0.9.17
  [7073ff75] IJulia v1.23.3
  [682c06a0] JSON v0.21.3

```
「deleteキー」を入力することで、パッケージモードを終了し、通常のREPLモードに戻ることができます。
```julia
pkg> (delete-key)
julia>
```
Julia REPLのパッケージモードは、Juliaパッケージを操作するための便利な機能です。 Juliaには、様々な分野で用途が広いパッケージが用意されており、パッケージモードを使用することで、簡単に必要なパッケージをインストールしたり、管理することができます。

## シェルモード
シェルモードは、REPLに「;」を入力することで、OSのシェルコマンドが実行されます。

例えば、次のように、「;」をREPLに入力すると、「shell>」プロンプトが表示されます。
```julia
julia> ;
shell>
```
この状態では、OSのシェルコマンドを入力することができます。

例えば、「ls」と入力すると、カレントディレクトリ内のファイルやディレクトリの一覧が表示されます。
```julia
shell> ls
```
また、「cd ディレクトリ名」と入力すると、指定したディレクトリに移動します。
```julia
shell> cd /tmp
```
「deleteキー」を入力することで、パッケージモードを終了し、通常のREPLモードに戻ることができます。
```julia
shell> (delete-key)
julia>
```
Julia REPLのシェルモードは、OSのシェルコマンドを直接実行するための便利な機能です。 この機能を使用することで、Juliaプログラム内からOSのファイルやディレクトリを操作することができます。

## サーチモード
入力履歴を検索できます。

コントロール＋rで起動します。

```julia
julia> println(1);print(2)
1
2
# ここで　コントロール＋rで起動しpを入力
(reverse-i-search)`p': println(1);print(2)
```
この状態は先に println(1);print(2)を入力、その後にコントロール＋rで起動しpを入力したところ、先に入力していたprintln(1);print(2)が表示されました。

改行でサーチモードを終了し、通常のREPLモードに戻ります。


## 上下キー
入力履歴を遡れたり進めたりすることができます。


## 終了（exit)
Julia を終了するには、Julia モードで、 exit()  または Ctrl+d を入力します。

## 参考図書
[１から始めるプログラミング](https://amzn.to/3HHR7Yv)
<a href="https://www.amazon.co.jp/1%E3%81%8B%E3%82%89%E5%A7%8B%E3%82%81%E3%82%8B-Julia%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E9%80%B2%E8%97%A4-%E8%A3%95%E4%B9%8B/dp/433902905X?crid=2JGVUDQSK5GJQ&keywords=julia+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E&qid=1671346628&sprefix=julia+%2Caps%2C224&sr=8-1&linkCode=li3&tag=buzz06-22&linkId=8f7deba521f52f812d35ecdbe756cc10&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=433902905X&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=buzz06-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=buzz06-22&language=ja_JP&l=li3&o=9&a=433902905X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

[Juliaプログラミングクックブック](https://amzn.to/3PFfb0a)
<a href="https://www.amazon.co.jp/Julia%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF-%E2%80%95%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%80%81%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%80%81%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97%E3%81%BE%E3%81%A7-Bogumi%C5%82-Kami%C5%84ski/dp/4873118891?crid=2JGVUDQSK5GJQ&keywords=julia+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E&qid=1671346628&sprefix=julia+%2Caps%2C224&sr=8-2&linkCode=li3&tag=buzz06-22&linkId=4e34b4b620932164412ec18acff914a8&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4873118891&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=buzz06-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=buzz06-22&language=ja_JP&l=li3&o=9&a=4873118891" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

[天才プログラマー タンメイが教える Julia超入門](https://amzn.to/3FJRpeW)
<a href="https://www.amazon.co.jp/%E5%A4%A9%E6%89%8D%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC-%E3%82%BF%E3%83%B3%E3%83%A1%E3%82%A4%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B-Julia%E8%B6%85%E5%85%A5%E9%96%80-Tanmay-Bakshi/dp/4807920219?crid=2JGVUDQSK5GJQ&keywords=julia+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E&qid=1671346628&sprefix=julia+%2Caps%2C224&sr=8-10&linkCode=li3&tag=buzz06-22&linkId=bf79aa67b5c5956c8fd26f9436401dc6&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4807920219&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=buzz06-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=buzz06-22&language=ja_JP&l=li3&o=9&a=4807920219" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />