Google Colaboratory+Nimで基本文法(文字列と数値)について勉強します.
Google Colaboratory(以下Google Colab)は、Google社が無料で提供している機械学習の教育や研究用の開発環境です。開発環境はJupyter Notebookに似たインターフェースを持ち、Pythonの主要なライブラリがプリインストールされています。
引用元:Google Colabの使い方
nim4colabのインストール
Google Colab で nimコマンドを使用するためのライブラリであるnim4colabをインストールします.
%load_ext nim4colab により%を付けてNimのコマンドを使えます.
!pip install git+https://github.com/demotomohiro/nim4colab.git
%load_ext nim4colab
nimpyのインストール
PythonからNimを呼び出すためのNimのライブラリ、nimpyをインストールします.
nimpyをインストールすることで、後述の fib.nim内で使っているnimpyをコンパイル、ライブラリとして使用することができます.
nimbleはNimのライブラリをインストールするためのコマンドです.
%nimble install nimpy -y
Nimの基本文法
ここでは、「空ファイルの作成」に必要なNimの基本構文を記載します。
文字列
文字列とは「"」で囲まれた文字です。
文字列とは「"」で囲まれた文字です。 文字列は「"」で囲んでいないと、コードが動かなくなります。
nim
# Google Colabでnimを使用するためのおまじない
%%nimc
# echo 'Hello, World'
echo "Hello, World"
echo "Hello, World"&"Hello, World" # &は文字列連結演算子
echo "Hello, World \nHello, World"
# echo '''Hello, World, Hello, World'''
# 実行結果
# Hello, World
# Hello, World
# Hello, World
nim(関数定義)
# Google Colabでnimを使用するためのおまじない
%%nimc
# 返り値:result
proc HelloWorld(str1: string): string =
var text = str1 # &は文字列連結演算子
result = "Hello World"
# 返り値:return
proc HelloWorld2(str1: string): string =
var text = "Hello World" & str1 # &は文字列連結演算子
return text
# 返り値:関数名
proc HelloWorld3(str1: string): string =
var text = "Hello World\n" & str1 # &は文字列連結演算子
text
# 初期設定
var echo_str:string
# 返り値:result
echo_str = HelloWorld("mass")
echo echo_str
# 返り値:return
echo_str = HelloWorld2("mass")
echo echo_str
# 返り値:関数名
echo_str = HelloWorld3("mass")
echo echo_str
# 実行結果
# Hello World
# Hello Worldmass
# Hello World
# mass
閑話休題:数値から文字列へ
%%nimc
var i = 5
var a = $i # 文字列へ変換
echo "5以下:"&a # 文字列の結合
# echo "5以下:"&$i # エラー発生
echo "5以下:" & $i # OK
echo "5以下:"&($i) # OK
nimpy
proc HelloWorld(入力変数: 入力の型): 出力の型 {.exportpy.} =
入力値 | Nimの型名 |
---|---|
なし | void |
文字列 | string |
整数 | int |
リスト | seq[string] |
# セル内のをsample.nimとして書き出し
%%writefile sample.nim
import nimpy
# proc 定義
# 返り値:result
proc HelloWorld(str1: string): string {.exportpy.} =
var text = "Hello World\n" & str1 # &は文字列連結演算子
result = text
# 返り値:return
proc HelloWorld2(str1: string): string {.exportpy.} =
var text = "Hello World\n" & str1 # &は文字列連結演算子
return text
# 返り値:関数名
proc HelloWorld3(str1: string): string {.exportpy.} =
var text = "Hello World\n" & str1 # &は文字列連結演算子
text
# Writing sample.nim
コンパイル
# 関数をコンパイル
%nim c --tlsEmulation:off --app:lib --out:sample.so sample.nim
# output sample.so
!ls
nimpy実行
# 作成・コンパイルしたsampleファイルをインポート
import time
import sample as sm # Nimでコンパイル
# 開始時間
start = time.time()
# nimpyを実行
print(sm.HelloWorld('mass'))
print(sm.HelloWorld2('mass'))
print(sm.HelloWorld3('mass'))
# 終了時間
elapsed_time = time.time() - start
# 実行時間
print ("elapsed_time:{0}".format(elapsed_time) + "[se")
# 出力結果
# 1134903170
# elapsed_time:36[se
数値
「"」で囲まず数字を打ち込むと、それは「数値」として扱われます。
「+」、「-」等を使うことで四則演算ができるようになります。
Nimでは「×」、「÷」は「*」、「/」で記述します。
ただし、「"」「'」で囲むと、数字は文字列と扱われます。
そして、文字列の数字は四則演算されません。
nim
# Google Colabでnimを使用するためのおまじない
%%nimc
echo 42
echo 42 + 21 # 足し算
echo 42 - 21 # 引き算
echo 42 * 2 # かけ算
echo 42 / 21 # 割り算
echo "42 + 21" # 文字列
# 実行結果
# 42
# 63
# 21
# 84
# 2.0
# 42 + 21
nim(関数定義)
# Google Colabでnimを使用するためのおまじない
%%nimc
# 返り値:result
proc integer00() =
echo 42
echo 42 + 21 # 足し算
echo 42 - 21 # 引き算
echo 42 * 2 # かけ算
echo 42 / 21 # 割り算
echo "42 + 21" # 文字列
integer00()
nimpy
# セル内のをsample.nimとして書き出し
%%writefile sample1.nim
import nimpy
proc HelloWorld00(str1: string): string {.exportpy.} =
var text = "Hello World\n" & str1 # &は文字列連結演算子
result = text
proc hello( ): void {.exportpy.} =
echo "HELLO NIMPY!!!"
proc integer00(): void {.exportpy.} =
echo 42
echo 42 + 21 # 足し算
echo 42 - 21 # 引き算
echo 42 * 2 # かけ算
echo 42 / 21 # 割り算
echo "42 + 21" # 文字列
# Writing sample.nim
コンパイル
# 関数をコンパイル
%nim c --tlsEmulation:off --app:lib --out:sample1.so sample1.nim
# output sample.so
!ls
nimpy実行
# 作成・コンパイルしたsampleファイルをインポート
import time
import importlib
import sample1 as sm1 # Nimでコンパイル
# importlib.reload(sm1)
# 開始時間
start = time.time()
# 数値を実行
print(sm1.HelloWorld00('mass'))
print(sm1.hello())
print(sm1.integer00())
# 終了時間
elapsed_time = time.time() - start
# 実行時間
print ("elapsed_time:{0}".format(elapsed_time) + "[se")
# 出力結果
# Hello World
# mass
# None
# None
# elapsed_time:0.0020661354064941406[se
まとめ
Google Colaboratory+Nimで基本文法(文字列と数値)について勉強しました.
参考サイト
Speeding up Python code with Nim