crossframe » Lisp(Scheme) http://crossframe.iiv.jp Windows Dev. Site Tue, 07 Nov 2023 06:31:52 +0000 ja hourly 1 https://wordpress.org/?v=3.8.41 Scheme Shell / Cygwin ../../../201504051009/ ../../../201504051009/#comments Sun, 05 Apr 2015 02:05:50 +0000 ../../../?p=1009 CygwinというWindows上でLinuxコマンドを実行できるとても便利なツールとして、これまでいろんなケースで使ってきました。
最近のマイブームによりSCSHというSchemeによるシェルを実行する環境を探していたとき、Ubuntuとかでチャレンジしたのですが、インストールがうまくいかず、結局このCygwinにいきつきました。さすがです!
SCSHは、一見Gaucheとも似ているように見えるのですが、Shellですので、実行コマンドを式に組み込めるところが面白いと思いました。
環境 : Windows 8.1
scsh03
Cygwinは32bit版である必要があります。

以下の例は、実行プログラムをシェルの中から呼んだみました。
スラッシュが式に使えるのが、ポイントだと思っています。
scsh01
scsh -c で式をパラメータに与えても実行できます。

また、PowerShellでも動きます。(コマンドレットは動作しません)
Cygwinのbinにパスを通しておく必要があります。
scsh02
(上記、(run (| (echo 123 + 456) (bc) (cat)) (> tempfile)) という、書き方も可です。)

http://scsh.net/

本家サイトを見ると、
The latest version of scsh is 0.6.7, released May 16, 2006:
ということで、ちょっと残念です。
この時点で動作させられるという記録を残しておく意味でも、とりあげてみました。
(こういうのBlogの役割かも)

参考サイト:
http://wiki.call-cc.org/eggref/4/scsh-process (以前取り上げたChickenSchemeのサイトにもあります。)

http://www.drdobbs.com/systems-administration-with-scsh/199101322

すばらしいです。

]]>
../../../201504051009/feed/ 0
IronScheme ../../../20150104956/ ../../../20150104956/#comments Sun, 04 Jan 2015 03:57:05 +0000 ../../../?p=956 今年最初の投稿は、新年早々IronSchemeです。(^^;

前回、Clojureをまわりを調べているときに、この存在を知り試してみようと思いました。
.NETフレームワークのライブラリが使用できるSchemeということですが、IronPython, IronRubyと同じように位置づけなのでしょう。

Lisp (+ List Processor))

http://decode.red/blog/20141201244/

ここで使用した順列のプログラムをIronSchemeで動かしてみました。

環境 : Windows 8.1

https://ironscheme.codeplex.com/

IronScheme-109887.zip

perm.ss

(import (srfi :1 lists))

(define (perm ls a)
    (if (null? ls)
        (display (reverse a))
        (for-each
            (lambda (n)
                (perm (remove (lambda (a) (equal? a n)) ls)(cons n a)))
            ls)))

(perm '(1 2 3) '())
(newline)

冒頭のimportの記述や、コマンド実行時ファイル指定の方法にちょっと迷いました。

hello.ss

(import (rnrs))

(display "Hello")
(newline)

上の二つのプログラムをそれぞれ以下のように実行しました。

IronScheme02

最初、srfiの指定方法がいけないのかどちらかわかりませんでしたが、リダイレクトの方法だとうまくいくので、とりあえずこのままにしました。

次に、下記サイトを参考に、VisualStduio 2013を使ってC#から呼び出してみました。

http://cryks.hateblo.jp/entry/20120417/1334660328

インストールは、NuGetを使いました。
IronScheme01

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using IronScheme;
using IronScheme.Runtime;

namespace csConsScheme01
{
    class Program
    {
        static void Main(string[] args)
        {
             Console.WriteLine("(+ 1 2 3)".Eval());
             Console.ReadKey();

             "(define (add x y)(+ x y))".Eval();
             var add = "add".Eval<Callable>();
             Console.WriteLine(add.Call(1, 2));
        }
    }
}

出力は、6と3です。
特定の処理だけ組み込み言語的に使う用途にいいかもしれません。

]]>
../../../20150104956/feed/ 0