Archive for 11月, 2014

Co-Routine / Scheme

火曜日, 11月 25th, 2014

以前コルーチンの記事Co-Routine / Pythonを書きましたが、Scheme(Lisp)でやってみました。最近、データ処理には「やはりLispが向いているかも」という気まぐれから、Schemeに再びはまっています。Schemeといえば、call/ccによる「継続」が有名ですが、ならばコルーチンでしょう、ということになりました。しくみがわかりやすいようにシンプルなものにしました。

#lang racket
(define cont #f)
(call/cc (lambda (return) 
           ((lambda (yield)(yield 1)(yield 2)(yield 4)) 
            (lambda (value)
               (call/cc (lambda (c)
                    (set! cont c)
                      (return value)))))))

scheme01

今回使ったこのDrRacketというツールは、初めて使ったのですが、とても高機能で使いやすいです。再びはまったのも、このツールによるところが大です。

http://blog.livedoor.jp/kosugip/archives/692821.html 参考

calling Clojure from Java

木曜日, 11月 6th, 2014

前回の流れで、今回はClojureを呼び出してみました。

環境: Java 1.8.0_25, Clojure 1.6.0, Leiningen 1.0 / Windows 8.1
JavaMain.java

import clojuresub.core;

public class JavaMain{
	public static void main(String[] args){
		String str = "Java String";
		core.sub(str);
	}
}

lein new clojuresub

を実行の後、以下のようにプログラムコード、プロジェクトファイルを記述します。
core.clj

(ns clojuresub.core
  (:gen-class
   :name clojuresub.core
   :methods [#^{:static true} (sub [String] String)]))

(defn -sub
  [s]
  (println (str "Clojure Message : " s)))

project.clj

(defproject clojuresub "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.6.0"]]
  :aot :all
  :main clojuresub)

clojuresubディレクトリで、

lein compile
javac -cp .\target\classes JavaMain.java
java -cp .`;target\classes`;clojure-1.6.0.jar JavaMain

を実行します。
clojre-1.6.0.jarは、leiningenインストール時の.m2フォルダリポジトリ内の深いところからカレントにコピーしておきます。

lein uberjar

を実行してjarを作成し、下記のように実行することもできます。

clojure01

参考:
http://stackoverflow.com/questions/2181774/calling-clojure-from-java
http://www.coderanch.com/t/601586/clojure/Calling-Clojure-Java-code

calling Scala from Java

月曜日, 11月 3rd, 2014

JavaからScalaを呼び出すときのメモです。

環境: Java 1.8.0_25, Scala 2.11.4 / Windows 8.1

public class JavaMain {
	public static void main(String args[]){
	
		String str="Java String";
		ScalaSub.sub(str);
	}
}
object ScalaSub{
	def sub(arg:String) = {
		println("Scala Message : " + arg);
	}
}

PowerShellでコンパイル。(セミコロンのエスケープに注意)
scala01