翻訳と辞書
Words near each other
・ Jocelyn Enriquez
・ Jocelyn Enriquez discography
・ Jocelyn Faubert
・ Jocelyn Field Thorpe
・ Jocelyn Frenette
・ Jocelyn Gauvreau
・ Jocelyn Gill
・ Jocelyn Godefroi
・ JOC Bombing
・ Joc dance ensemble
・ JOC Group
・ Joc Pederson
・ Joca
・ Joca Claudino
・ Joca Marques
JoCaml
・ Jocara
・ Jocara abachuma
・ Jocara aidana
・ Jocara albiferalis
・ Jocara albimedialis
・ Jocara amazonalis
・ Jocara anacita
・ Jocara anastasia
・ Jocara andeola
・ Jocara ansberti
・ Jocara athanasia
・ Jocara basilata
・ Jocara breviornatalis
・ Jocara bryoxantha


Dictionary Lists
翻訳と辞書 辞書検索 [ 開発暫定版 ]
スポンサード リンク

JoCaml : ウィキペディア英語版
JoCaml

JoCaml is an experimental functional programming language derived from OCaml. It integrates the primitives of the join-calculus to enable flexible, type-checked concurrent and distributed programming. The current version of JoCaml is a re-implementation of the now unmaintained JoCaml made by Fabrice Le Fessant, featuring an modified syntax and improved OCalm compatibility compared to the original.
JoCalm was used by team Camls 'R Us to implement a distributed ray tracer, earning 2nd place on the ICFP 2000 programming contest.
== Example ==

type coins = Nickel | Dime
and drinks = Coffee | Tea
and buttons = BCoffee | BTea | BCancel;;

(
* def defines a Join-pattern alternatives set clause

* '&' in the left side of '=' means join (channel synchronism)

* '&' in the right hand side is parallel processing

* synchronous_reply :== "reply" () "to" channel_name

* synchronous channels have function-like types (`a -> `b)

* while asynchronous ones have type `a Join.chan

* only the last statement in a pattern rhs expression can be an asynchronous message

* 0 in an asynchronous message position means STOP ("no sent message" in CSP terminology).

*)

def put(s) = print_endline s ; 0 (
* STOP
*)
;; (
* put: string Join.chan
*)

def give(d) = match d with
Coffee -> put("Cofee")
| Tea -> put("Tea")
;; (
* give: drink Join.chan
*)

def refund(v) = let s = Printf.sprintf "Refund %d" v in put(s)
;; (
* refund: int Join.chan
*)

let new_vending give refund =
let vend (cost:int) (credit:int) = if credit >= cost
then (true, credit - cost)
else (false, credit)
in
def coin(Nickel) & value(v) = value(v+5) & reply to coin
or coin(Dime) & value(v) = value(v+10) & reply to coin

or button(BCoffee) & value(v) =
let should_give, remainder = vend 10 v in
(if should_give then give(Coffee) else 0 (
* STOP
*))
& value(remainder) & reply to button

or button(BTea) & value(v) =
let should_give, remainder = vend 5 v in
(if should_give then give(Tea) else 0 (
* STOP
*))
& value(remainder) & reply to button

or button(BCancel) & value(v) = refund( v) & value(0) & reply to button
in spawn value(0) ;
coin, button (
* coin, button: int -> unit
*)
;; (
* new_vending: drink Join.chan -> int Join.chan -> (int->unit)
*(int->unit)
*)

let ccoin, cbutton = new_vending give refund in
ccoin(Nickel); ccoin(Nickel); ccoin(Dime);
Unix.sleep(1); cbutton(BCoffee);
Unix.sleep(1); cbutton(BTea);
Unix.sleep(1); cbutton(BCancel);
Unix.sleep(1) (
* let the last message show up
*)
;;

execution

$ jocamlc example.ml -o test
$ ./test
Cofee
Tea
Refund 5


抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)
ウィキペディアで「JoCaml」の詳細全文を読む



スポンサード リンク
翻訳と辞書 : 翻訳のためのインターネットリソース

Copyright(C) kotoba.ne.jp 1997-2016. All Rights Reserved.