Переписал пример из "Core Java. Fundamentals" на clojure, чтобы разобраться с тем, как на ней пишется GUI.
Код и комментарии - под катом.
(setf *my-blog* (make-instance 'blog)) ;Also available in Common LISP
let sendToStream (str: NetworkStream) (bin: Object) =
match bin with
| :? string as strn ->
str.Write(System.Text.Encoding.UTF8.GetBytes(strn), 0, strn.Length)
| :? (byte[]) as bytarr ->
str.Write(bytarr, 0, bytarr.Length)
| _ -> failwith "Invalid input" например.
module Caesar
let alphabet = Array.ofSeq "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.,?!+=/"
let getIndex (arr: 'a[]) (elt: 'a) =
let optIndex = arr |> Array.tryFindIndex( (=) elt )
match optIndex with
| Some(x) ->
printfn "found %A" x
x
| None ->
printfn "None"
-1
let encodeLetter (shift: int) (letter: char) =
let idx =
letter
|> getIndex alphabet
printfn "%c - %d" letter idx
alphabet.[
( idx + shift ) % (Array.length alphabet)
]
(load "our-file-name")(sb-ext:save-lisp-and-die "binary-file-name" :executable t :toplevel 'function-name)(load "our-file-name")
(ext:saveinitmem "binary-file-name" :executable t :init-function 'function-name :quiet t)