ラベル Elixir の投稿を表示しています。 すべての投稿を表示
ラベル Elixir の投稿を表示しています。 すべての投稿を表示

2015年8月15日土曜日

[vim][RaspberryPi]Elixirのシンタックス設定 2時間ハマった。

はじめに

Raspberry pi 上でElixirで遊ぶため、vimを入れたので、シンタックスを設定しようとしたが、vimやNeoBundleについて知らなすぎたため、2時間ハマった。そのハマった点を忘れないよう記事にした。

環境

  • OS:Rasbian

原因

vimrc内に ”syntax enable" がなかったこと

手順

基本的な手順は1.の通りである。

  1. http://kaworu.jpn.org/vim/NeoBundle

セットアップ

$ mkdir -p ~/.vim/bundle
$ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

$HOME/.vimrc の設定

以下をファイルへ追記する。

set nocompatible
filetype off            " for NeoBundle

if has('vim_starting')
        set rtp+=$HOME/.vim/bundle/neobundle.vim/
endif
call neobundle#begin(expand('~/.vim/bundle'))
NeoBundleFetch 'Shougo/neobundle.vim'
" ★

" ここから NeoBundle でプラグインを設定します
" NeoBundle で管理するプラグインを追加します。
NeoBundle 'Shougo/neocomplcache.git'
NeoBundle 'Shougo/unite.vim.git'
NeoBundle 'elixir-lang/vim-elixir'     " elixir のシンタックス

call neobundle#end()            " ★から移動
filetype plugin indent on       " restore filetype

syntax enable                   " これがなかったため、シンタックスが表示できず。。。

プラグインのインストール

  1. vimの起動。ファイル指定しなくともよい。
  2. NeoBundleInstallの実行(:NeoBundleInstall とコマンド実行)
  3. vimの終了

シンタックス確認

適当なelixirのファイルを開く。色が付いていればOK。

2015年7月20日月曜日

[Elixir][RaspberryPi]ラズベリーパイにElixirをインストールする。

ラズベリーパイ内にElixirをインストールするための手順を下記に示す。

参考:https://www.erlang-solutions.com/downloads/download-erlang-otp

        http://elixir-lang.org/install.html#distributions

手順(太字のコマンドを実行する)

# wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb

(何やら画面っぽいものが出てくる)

<Configuring erlang-solutions>
wheezy へ修正
(※squeezeではダメ!)

↓設定ファイルからでもOK
-- etc --
# su -
(input root passwd)

# vi  /etc/apt/sources.list
(下記をsources.listファイルへ追加する)
deb http://packages.erlang-solutions.com/debian wheezy contrib
--

# wget http://packages.erlang-solutions.com/debian/erlang_solutions.asc

# sudo apt-key add erlang_solutions.asc

# sudo apt-get update

# sudo apt-get install erlang

# sudo apt-get install elixir

2015年6月21日日曜日

[Elixir]ファイルへ文字列を書き込む

IO.binwrite() を使って、開いたファイルへ文字列を書き込む。

開くファイルはローカルにあってもなくてもよい。

■やること

hello ファイルを開き、world文字列を書き込む。

defmodule MyModule do
    def write( word ) do
        case File.open "hello", [:write] do          # 開く
            {:ok, file} -> writeStr( file, word )    # 書き込む
                           File.close file           # 閉じる
            {:error, posix } -> IO.puts posix
        end
    end

    def writeStr( file, word ) do
        IO.binwrite file, word
    end
end

MyModule.write( "world" )

[Elixir]ファイルを読み込む

File.read()を使って、ファイルの内容を読み込む。

ファイルの中身(hightemp_1.txt)
高知県 江川崎 41 2013-08-12
埼玉県 熊谷 40.9 2007-08-16
岐阜県 多治見 40.9 2007-08-16

ファイルの内容を読み込み、表示するソース

defmodule MyModule do
    def fileRead( path ) do
        case File.read(path) do
            {:ok, body} -> body
            {:error, reason} -> reason
        end
    end
end

IO.puts MyModule.fileRead( "./hightemp_1.txt" )

実行結果

PS C:\Users\tomohiko\Documents\19_elixir> chcp 65001
Active code page: 65001
PS C:\Users\tomohiko\Documents\19_elixir> elixir .\fileread.exs
高知県     江川崎     41      2013-08-12
埼玉県     熊谷      40.9    2007-08-16
岐阜県     多治見     40.9    2007-08-16

2015年6月19日金曜日

[Elixir]文字列をシャッフルする

Enum.shuffle()を使って、文字列をランダムにシャッフルする。

defmodule MyModule do
    def shuffle( str ) do
        :random.seed(:os.timestamp)   # これがないと、いつもシャッフル後の文字列が同じとなる。
        shuf = Enum.shuffle( String.codepoints( str ) )
        Enum.join( shuf )
    end
end

str = "abcde"
IO.puts MyModule.shuffle( str )
IO.puts MyModule.shuffle( str )

出力例

PS C:\Users\tomohiko\Documents\19_elixir> elixir .\test_shuffle.exs
adbce
dbeac

2015年6月13日土曜日

2015年6月12日金曜日

[Elixir]リスト内要素を標準出力する

Enum.each()を使用し、リスト内要素を標準出力する。
iex(8)> Enum.each( ["I", "am", "tomohiko"], fn(x) -> IO.puts x end )
I
am
tomohiko
:ok

[Elixir]リスト内要素を特定の文字列で結合する

Enum.join()を使い、リスト内要素を結合する。
iex(1)> Enum.join( ["I","am","tomohiko."], " " )   # 空白で結合する
"I am tomohiko."
iex(2)> Enum.join( ["I","am","tomohiko."], "-" )   # ハイフンで結合する
"I-am-tomohiko."
iex(3)> Enum.join( ["I","am","tomohiko."])         # ただ結合する
"Iamtomohiko."

2015年6月8日月曜日

[Elixir] 比較対象値とリスト内要素を比較し、少なくとも1つ一致するものがあれば、trueを返す。

Oracleのin比較演算子と同じことができないものかと調べたら、あった。
リスト内の各要素に対し、比較したい値と比較し、同じものがあれば、trueを返す。
なければ、falseを返す。

以下に例を示す。
iex(1)> n = 1
1
iex(2)> Enum.any?([1, 5, 6, 7, 8, 9, 15, 16, 19], fn(x) -> x == n end )
true
iex(3)> n = 2
2
iex(4)> Enum.any?([1, 5, 6, 7, 8, 9, 15, 16, 19], fn(x) -> x == n end )
false
2015/06/24 追記
こちらが普通かもしれない。
iex(1)> Enum.member?([1,2,3,4],3)
true
iex(2)> Enum.member?([1,2,3,4],5)
false

2015/07/08 追記
いや、これではないか。
iex(7)> 1 in [1,2,3]
true

2015年6月7日日曜日

[Elixir] 文字列の分割

文字列の分割 空文字除かない場合と空文字を除く場合を示す。
↓ソース
str = "Now I need a drink,"
IO.puts "ex. " <> str

IO.puts "trim なし"
words = String.split(str,[","," "])               # 空文字は除かない
Enum.each( words, fn x -> IO.puts x end )

IO.puts "trim: true"
words = String.split(str,[","," "], trim: true)   # 空文字は除く
Enum.each( words, fn x -> IO.puts x end )
↓実行結果
Active code page: 65001
PS C:\Users\tomohiko\Documents\19_elixir> elixir .\split_test.exs
ex. Now I need a drink,
trim なし
Now
I
need
a
drink
                # 空文字が出力される=空文字は除かれていない
trim: true
Now
I
need
a
drink

2015年6月6日土曜日

[Elixir]PowerShellを使って、UTF-8日本語表示を行う。


コマンドプロンプトでは、UTF-8の日本語表示がうまくいかなかったので、PowerShellでやることにした。
手順
  1. PowerShellを起動する。(スタート-プログラムとファイル検索欄に[powershell]と入力し、Enterキー) 
  2. chcp 65001 と入力し、Enter これで日本語表示できる状態となる。

[Elixir]文字列を逆順にする

任意の文字列を逆順にする。
iex> String.reverse("stressed")
"desserts"