プログラミング言語 Gauche、Schemeの話

118 views
Skip to first unread message

hasu

unread,
Aug 18, 2018, 5:45:54 AM8/18/18
to Vine Linux ユーザーフォーラム
以前(2018年2月)、同じ話題をvine-users MLの方に投稿しました。
「 [vine-users:082940] Re: ブックマークのHTMLファイルを見やすくするソフト
                                / プログラミング言語 Gauche、Schemeの話」
    http://ml.vinelinux.org/vine-users/msg32865.html

その時のGaucheのバージョンは
0.9.5だったのですが、新しく 0.9.6になったので、
以前の投稿の文章に修正を入れて、また vine-users MLの方に投稿しようと
したのですが、vine-users MLのサーバーが不調で投稿できませんでした。
それで Vine Linux ユーザーフォーラムの方に投稿させてもらう事にしました。


ちょっと話がそれますが、Gaucheで自作のプログラムを作っています。
Firefoxなど いくつかのウェブブラウザは、ブックマークの情報を
HTMLファイルとしてエクスポートすることができます。
そのHTMLファイルは ウェブブラウザで開いて 見ることができます。
そのブックマークのHTMLファイルをブラウザで見やすくなるように
修正するというソフトです。興味のある方(かた)は どうぞ。
「GitHub - HidetomoT/easy_view_bookmarkfile:
                    change bookmark HTML file to be easy to view」
    https://github.com/HidetomoT/easy_view_bookmarkfile/blob/master/README_Japanese.md


話が本題に戻ります。
以下の文章が投稿したかった文章です。


私は、2016年の終盤に VineSeedのMLアーカイブのWebページで、
Gauche-0.9.5というパッケージをアップデートしましたというお知らせを見て、
Gaucheというプログラミング言語があるのを知って、
使ってみようと思って、勉強しはじめました。

Gaucheは Schemeというプログラミング言語の くくりに属しています。
私は 今までは C言語、C++ で プログラムを作る経験が多かったので、
Schemeのプログラムを作る時も、
C言語の時のプログラムの作り方で発想してしまって、
なかなか Schemeの発想に切り替わらずに 悪戦苦闘しました。

世の中には、プログラミング言語の種類が多くあるので、
別に Schemeに こだわらなくて いいのですが、
Schemeに興味を持ってしまったので、
これからも勉強してみようと思っています。

以降に、Gauche、Schemeの解説の話を載せてみます。



◆  GaucheのサイトのWebページ

  ・「Gauche - A Scheme Implementation」
        http://practical-scheme.net/gauche/index-j.html

  ・「Practical Scheme」
          http://practical-scheme.net/index-j.html
    (「Practical Scheme」というタイトルですが、
      「practical」の単語だけを見ると、「実用的な」「実践的な」
      という意味がありますが、他に「実習」「演習」という意味も あります。)

  ・「Gauche ユーザリファレンス: Top」
        http://practical-scheme.net/gauche/man/gauche-refj/index.html

  ・「WiLiKi - Gauche, Scheme」
        https://practical-scheme.net/wiliki/wiliki.cgi



◆  Gauche、Schemeのプログラミング言語の解説。

  ・「Gaucheでメタプログラミング(1):ちょっと変わったLisp入門 (1/5) - @IT」
        http://www.atmarkit.co.jp/ait/articles/0810/31/news148.html

  ・「Scheme入門 スーパービギナー編 - atpons @ Lisp」
        https://sites.google.com/site/atponslisp/home/scheme/racket/schemenyuumon-1/schemenyuumon

  ・「独習 Scheme 三週間 Teach Yourself Scheme in Fixnum Days」
        http://www.sampou.org/scheme/t-y-scheme/t-y-scheme.html

  ・「お気楽 Scheme プログラミング入門  contents」
        http://www.geocities.jp/m_hiroi/func/scheme.html

  ・「もうひとつの Scheme 入門」
        http://www.shido.info/lisp/idx_scm.html

  ・「Scheme - Expressions」
        https://www.cs.cmu.edu/Groups/AI/html/r4rs/r4rs_6.html

  ・「Scheme演習 第3回 - Scheme演習」
        http://www-ui.is.s.u-tokyo.ac.jp/~hara2001/scheme/material/3/3.mtd.column.html

  ・「説明のないとってもシンプルなサンプルプログラム集(Gauche)」
        http://simplesandsamples.com/hello.scm.html

  ・「初めてのGauche - Qiita」
        https://qiita.com/kou_tana77/items/b1638e8ae2630cc82a40

  ・「Learn Scheme in 15 minutes」
        http://web-artanis.com/scheme.html

  ・「逆引きScheme: 一覧」
        http://tips.cddddr.org/scheme/index.cgi?c=a

  ・「プログラミング言語 Scheme の解説」
        http://www7b.biglobe.ne.jp/~saia/scheme.html

  ・「なんでも再帰」
        http://practical-scheme.net/docs/tailcall-j.html

  ・「なんでもλ」
        http://practical-scheme.net/docs/lambda-j.html



◆  Gaucheプログラムのテスト動作の確認の方法。
  ・「Gaucheでプログラミング (2/4)」
        http://www.atmarkit.co.jp/ait/articles/0812/17/news149_2.html

  ・「REPLでの開発 - Gauche」
        http://practical-scheme.net/gauche/man/?l=ja&p=REPL%e3%81%a7%e3%81%ae%e9%96%8b%e7%99%ba

  ・goshのREPLは、(exit)と入力すると、終了します。



◆  WindowsでGaucheを動かす件について。

  ・Windowsに MinGWというソフトをインストールし、Gaucheをインストールします。
    Gaucheが MinGWを利用して動くという形に なります。

  ・「MinGW(GCC)のインストール(Windows10)」
      http://windows.blogo.jp/programming/install_mingw_gcc

    ・上記の方法でインストールに失敗する場合は、MinGWのバージョンが古くなって
      しまいますが、次の方法でも インストールすることができそうです。
      (ただし、MinGWのバージョン4.4.0で Gaucheの全ての機能が正常に
        動作するのかどうかは わかりません。)
      「version 4.4.0 / HOWTO Install the MinGW (GCC) Compiler Suite」
          http://www.mingw.org/wiki/InstallationHOWTOforMinGW#comment-781
      「MinGW - /MinGW/Base/gcc/Version4/Previous Release gcc-4.4.0 」
          https://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/Previous%20Release%20gcc-4.4.0/
      ・「7zip」というファイル圧縮ソフトで、ファイル名の
        拡張子「.lzma」「.tar」が 解凍できるようです。

  ・「Windows用バイナリインストーラ - Gaucheダウンロード」
        http://practical-scheme.net/gauche/download-j.html
    Webページの「簡単なインストール (Windows)」の章に書いてあります。

  ・「Windowsコンソール」
        http://practical-scheme.net/gauche/gmemo/index.cgi?Windows%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB

  ・「Gauche : Windowsコンソール関連」
        http://practical-scheme.net/wiliki/wiliki2.cgi?Gauche%3AWindows%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E9%96%A2%E9%80%A3

  ・「Gauche : Windowsコンソール対応」(Gauche v0.9.6のWindowsコンソール対応)
        http://practical-scheme.net/wiliki/wiliki2.cgi?Gauche%3AWindows%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E5%AF%BE%E5%BF%9C

  ・もし OSがWindows10の場合、コマンドプロンプトの起動の方法が
    わかりにくいと思いますので、次のWebページを参考にしてください。
    「Windows 10 コマンドプロンプトを起動する」
        https://www.tipsfound.com/windows10/11008

  ・「MinGW, MSYS 周りの知識整理: 参考までに cygwin について - Qiita」
        https://qiita.com/Yuki-Inoue/items/58d3bb564cf2c20fde97

  ・「Gauche : Windows特有の実行ファイル」
        http://practical-scheme.net/gauche/man/gauche-refj/GauchewoQi-Dong-suru.html#WindowsTe-You-noShi-Xing-huairu



◆  エディタ Emacsのinfoモードで ユーザーリファレンスを見る件について。

  ・VineLinuxのGauche-0.9.6のパッケージでは
    info版のユーザーリファレンスを含んでいます。
    (/usr/share/infoに gauche-refjやgauche-refeが あります。)
    なので、オフライン時に Emacsのinfoモードで ユーザーリファレンスを
    見ることができます。

  ・「Emacs の Info の使い方と Info ドキュメントインストールの仕方」
        http://iriya-ufo.net/blog/2013/10/20/how-to-use-emacs-info-and-document-install/

  ・「意外と知らない?EmacsでのInfoの読み方」
        https://qiita.com/l3msh0/items/8d855a52b4cacd3da5b4

  ・検索の仕方にも何通りかあるみたいですが、
    例えば 「比較」という言葉を ユーザーリファレンスの文中から
    順番に検索していきたい場合、次のようなキー操作でも できます。
      ・「s」のキーを押す。
      ・「比較」と入力。(入力の終りは ENTERキーを押す)
        これで 1つ目の場所が見つかります。
      ・2つ目以降の場所を見つけたい場合、次のキー操作を繰り返します。
        ・「s」のキーを押す。デフォルトが「比較」になっているので、
          ENTERキーを押す。



◆  省略したプログラムの記述の仕方。
  ・「lambda」の代わりに「^」と 書くことができます。
    これはGauche独自の仕様拡張との事です。

  ・リストの何番目かの要素を返す関数は list-ref ですが、
    Gaucheの場合、万能アクセサ「~」という物があり、
    list-ref の代わりに使えます。
        (速度的に言うと、万能アクセサの方が遅いらしいです。)
    「万能アクセサ - Gauche」
        http://practical-scheme.net/gauche/man/?l=ja&p=%e4%b8%87%e8%83%bd%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b5



◆ 「'」についての説明。
  ・以降の文章で、「'」が出てくるので、
    リテラル式 「quote」、「'」について、ここで説明しておきます。
    「Scheme 入門 3. リストを作ろう」
        http://www.shido.info/lisp/scheme3.html
      ページ先頭から5割ほど進んだ所の「3. quote」の章に書いてあります。
    だいたいの意味で言うと、前に「'」を付けると、
    定数のような扱いになるということです。



◆  GaucheからのLinuxコマンドの呼び出しの方法(その1)。
  ・関数 process-output->string、process-output->string-list の使い方
    について 書きます。

  ・「高レベルプロセスインタフェース - Gauche」
        http://practical-scheme.net/gauche/man/?l=ja&p=process-output-%3Estring

  ・事前に モジュールを読み込んでおく必要があります。
      (use gauche.process) と 書いておきます。
    process-output->string等よりも前に 行なっておきます。

  ・ (process-output->string-list "ls /bin | head") のように
    ダブルクォーテーションで囲むこともできて、
    途中に パイプライン「|」を入れることもできるようです。



◆  GaucheからのLinuxコマンドの呼び出しの方法(その2)。
  ・2018年2月の投稿の時には、関数 run-process の使い方について書きました。
    run-processは デフォルトでは 子プロセスの終了を待たなかったのですが、
    常に 子プロセスの終了を待つ do-process という関数があるのを
    見つけたので、今回は do-processについて書きます。

  ・「高レベルプロセスインタフェース - Gauche」
        http://practical-scheme.net/gauche/man/?l=ja&p=%e3%82%b5%e3%83%96%e3%83%97%e3%83%ad%e3%82%bb%e3%82%b9%e3%81%ae%e5%ae%9f%e8%a1%8c

      ・複数のプロセスをパイプラインで つないで実行するための関数として、
        do-pipeline、run-pipeline という関数もあります。

  ・事前に モジュールを読み込んでおく必要があります。
      (use gauche.process) と 書いておきます。
      do-processよりも前に 行なっておきます。

  ・do-processの使い方の単純な例です。
      (do-process '(ls -al))

  ・引き数の cmd/argsは、形式としては リストです。

  ・cmd/argsの各要素は、x->stringで文字列に変換されるとのことなので、
    各要素をダブルクォーテーションで囲む必要はありません。

  ・cmd/argsの中に、リダイレクト">"等を 記述してはいけません。

  ・例えば、Linuxコマンドの出力を "calender.txt"というファイルへ
    リダイレクトしたい時は、次のような書き方になります。
      (do-process '(cal) :redirects '((> 1 "calender.txt")) )

  ・もし、上記の"calender.txt"の部分を 変数に したいなら、
    次のような書き方になります。 output_f_nameが変数です。
      (do-process '(cal) :redirects
                     (list (list '> '1  output_f_name)) )

  ・ここまで 関数 do-processについて書いてきましたが、
    関数 run-processを使った場合で、子プロセスの終了を待ちたい場合は
    waitキーワード 引数を使うようにします。
      (run-process '(ls -al) :wait #t)



◆  GaucheからのLinuxコマンドの呼び出しの方法(その3)。
  ・関数 sys-system の使い方について 書きます。

  ・「sys-system - プロセス管理 - Gauche」
        http://practical-scheme.net/gauche/man/?l=ja&p=sys-system

  ・次のような書き方で コマンドを実行できます。
      (sys-system "ls -al")

  ・コマンドの文字列は シェルに渡されて 実行されるとのことなので、
    入出力のリダイレクトや、パイプでつないだコマンド等もそのまま渡せるとのことです。
   
  ・関数 do-process の説明の所に sys-systemについての注釈が書かれていました。
    「注:外部プロセスを走らせる方法にはもうひとつ、sys-systemがあります。」
    という文で始まる文章です。
    do-processと sys-systemの使い分けについて書かれていました。



◆  Gaucheで、実行形式ファイル、スクリプトを書く件について。

  ・シェルのスクリプトを書く場合は、1行目に
    「#!/bin/sh」や「#!/bin/bash」を書きますが、
    Gaucheの場合は、「#!/usr/bin/env gosh」と書くのが良さそうです。

  ・「Gauche > コマンドライン引数を使う(その1)」
        http://simplesandsamples.com/arg.scm.html

  ・「Gauche > コマンドライン引数を使う(その2)」
        http://simplesandsamples.com/args.scm.html

  ・さらに詳しい話は 次のWebページに載っています。
    「Schemeスクリプトを書く - Gauche」
        http://practical-scheme.net/gauche/man/?l=ja&p=Scheme%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88%e3%82%92%e6%9b%b8%e3%81%8f

    「コマンドライン引数の解析 - Gauche」
        http://practical-scheme.net/gauche/man/?l=ja&p=gauche.parseopt



◆  文字列の検索、置換の話(正規表現を使った場合)。
  ・「サルにもわかる正規表現入門」
       http://www.mnet.ne.jp/~nakama/#no-one

  ・ "def"が "abcdefghi"の中に含まれているかどうかの判定。
     if文の中の判定が真になるので "yes"が選ばれます。
         (if (rxmatch #/def/ "abcdefghi")  "yes"  "no")

  ・ "klm"が "abcdefghi"の中に含まれているかどうかの判定。
     if文の中の判定が偽になるので "no"が選ばれます。
         (if (rxmatch #/klm/ "abcdefghi")  "yes"  "no")

  ・ 正規表現の部分を #/def/i のように 末尾に文字iを付けると、
     大文字、小文字を区別しない判定に なります。
         (if (rxmatch #/def/i  "ABCDEFGHI")  "yes"  "no")

  ・ 検索結果は、一致が見つかった場合は <regmatch>オブジェクト
     という形式で返ってきます。
     一致が見つからなかった場合は #f (論理値でいうFALSE、偽)が
     返ってきます。
     <regmatch>オブジェクトの両端を 丸括弧で囲む事で、
     評価が行なわれ、結果の文字列が返ってきます。
         (define match (rxmatch #/def/ "abcdefghi") )
         (print match)
                  =>  #<<regmatch> 0x82c8000>
         (print (match) )
                  =>  def

  ・ 文字列の変数 str2の内容に対して、
     "def"を "xyz"に 置換する処理です。
         (define str2 "abcdefghi")
         (set! str2 (regexp-replace #/def/  str2  "xyz") )
         (print str2)

       ・関数 regexp-replaceと 関数 regexp-replace-allが あります。
         regexp-replaceは 検索で最初に合致した箇所のみを置き換え、
         regexp-replace-allは 全ての合致した箇所を置き換えます。

  ・「正規表現 - Gaucheユーザリファレンス」
        http://practical-scheme.net/gauche/man/?l=ja&p=%e6%ad%a3%e8%a6%8f%e8%a1%a8%e7%8f%be

  ・「Gauche:正規表現を使う」
        http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3A%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E3%82%92%E4%BD%BF%E3%81%86

  ・「Gauche:regexp - WiLiKi」
        http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3Aregexp



◆  関数の中で、defineを使う時について。
  ・関数の中で defineを使う場合、lambda文があって、let文があるとすると、
    位置的に let文の次あたりに define文を書かないといけないようです。
    http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3ABugs%3Alog8#H-qa8lys



◆  モジュールとは? (モジュールの作り方)。
  「お気楽 Scheme プログラミング入門 / オブジェクト指向編」
      http://www.geocities.jp/m_hiroi/func/abcobj07.html



◆  C言語の関数呼び出しの際の 引き数のポインタ渡しのような事が
    Schemeで可能なのかどうかを調べた件について。

  ・「Scheme pass-by-reference - Stack Overflow」
        https://stackoverflow.com/questions/3262119/scheme-pass-by-reference

  ・「Parameter Passing in Scheme - Stack Overflow」
        https://stackoverflow.com/questions/2304481/parameter-passing-in-scheme



◆  Schemeの関数からの返り値で、複数個の返り値を返す方法について。

  ・「Gaucheで多値を受け取る」
        https://genkami.github.io/2016/08/09/200000.html

  ・「Schemeにおける「多値」という概念について」
        https://genkami.github.io/2016/10/21/001455.html

  ・「Scheme:多値 - Gauche」
        https://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3A%E5%A4%9A%E5%80%A4



◆  ファイル オープンの時のエラーを 例外処理で扱う方法について。
  ・私は Gaucheの例外処理を まだ完全には理解できていないのですが、
    ファイル オープンの時のエラーを 例外処理で扱うプログラムを
    考えてみたところ、次のようになりました。
    guard文のあたりが それです。

    (define input_port '() )

    (define (print_error filename)
      (format (current-error-port)
              "couldn't open input file: ~a\n" filename)
      )

    (define ( disp_file_contents  input_filename)
      (guard (exc [(<error> exc) 
                   (print_error input_filename)  (exit 2) ])
             (set! input_port (open-input-file input_filename))
             )

      (let read_loop ((line_str (read-line input_port)))
        (when (not (eof-object? line_str))
              (print line_str)
              (read_loop (read-line input_port))
              )
        )

      (close-input-port input_port)
      )

    (disp_file_contents "abc.txt")


  ・「例外を使う - 技術整備」
        http://d.hatena.ne.jp/taisuke_memo/20091231/1262250422

  ・「guard - Gaucheユーザリファレンス」
        http://practical-scheme.net/gauche/man/?l=jp&p=guard




◆  エディタ Emacsで、Schemeのプログラムの対応する括弧を色付けする件について。

  ・Emacsで「rainbow-delimiters」というパッケージを使うと、
    プログラムの対応する括弧を色付けすることができます。
    Emacsが scheme-modeで動いている時に、rainbow-delimitersが有効に
    なるように設定しておこうと思います。
    Schemeのプログラムのファイルの拡張子が「.scm」だと
    自動的に scheme-modeに切り変わります

  ・インターネット検索で 「rainbow-delimiters」で検索してもらうと、
    色々と情報が出てくると思うのですが、
    VineLinux6.5で デフォルトでインストールされているEmacsが
    バージョン 23.3.1 で、 導入方法が インターネットの情報とは異なっていたので、
    以降に、バージョン 23の場合の やり方を書いておきます。

  ・rainbow-delimiters.elをダウンロードします。
    自分のユーザーの どこかのディレクトリで、次のコマンドを行ないます。
        wget https://raw.githubusercontent.com/Fanael/rainbow-delimiters/master/rainbow-delimiters.el

      ・Webブラウザで 上記のURLを開いて 「名前を付けてページを保存」を行なう
        という方法でも、ダウンロードできると思います。
      ・ダウンロードされたrainbow-delimiters.elのバージョンは 2.1.3 で、
        ファイルの長さは12977バイトでした。(2018年8月時点)

  ・rainbow-delimitersのデフォルトの状態では、色付けが薄い感じになっています。
    これを 濃いめの色に変更します。(色の情報を直接 変更しました。)

  ・rainbow-delimiters.elの124行目から130行目です。
    次のようになっています。
(eval-when-compile
  (defmacro rainbow-delimiters--define-depth-faces ()
    (let ((faces '())
          (light-colors ["#707183" "#7388d6" "#909183" "#709870" "#907373"
                         "#6276ba" "#858580" "#80a880" "#887070"])
          (dark-colors ["grey55" "#93a8c6" "#b0b1a3" "#97b098" "#aebed8"
                        "#b0b0b3" "#90a890" "#a2b6da" "#9cb6ad"]))

  ・124行目から130行目を 次のように 書き換えます。(実質 2行のみの変更です。)
(eval-when-compile
  (defmacro rainbow-delimiters--define-depth-faces ()
    (let ((faces '())
          (light-colors ["#00b0b0" "#ff0000" "#0000b0" "#00ff00"
                         "#ff00ff" "#b0b000" "#00b000" "#e0e000" "#0000ff"])
          (dark-colors ["grey55" "#93a8c6" "#b0b1a3" "#97b098" "#aebed8"
                        "#b0b0b3" "#90a890" "#a2b6da" "#9cb6ad"]))

  ・rainbow-delimiters.elを load-pathの通ったディレクトリに
    コピーします。(スーパーユーザーで行ないます。)
    私の場合は Emacsのバージョンが23.3.1だったので、
    /usr/share/emacs/23.3/lisp/ に コピーしました。

  ・rainbow-delimiters.el を コンパイルして、
    rainbow-delimiters.elc を 作ります。
    「Emacs のバイトコンパイル | プログラマーズ雑記帳」
        http://yohshiy.blog.fc2.com/blog-entry-22.html
    管理者の権限が必要なようなので、
    「sudo -」で いったん スーパーユーザーになって、
    「emacs &」で emacsを起動して、コンパイルを行なってください。

  ・自分のユーザーのホームディレクトリ等にある「.emacs」のファイルに、
    次の内容を追加で記入します。
;;--------- rainbow-delimiters を使うための設定 ------------------
(require 'rainbow-delimiters)
(add-hook 'scheme-mode-hook 'rainbow-delimiters-mode)




◆  対応する括弧の色付けが、正規表現の中の「|」パイプラインにより
    誤作動するのを防ぐ件について。

  ・rainbow-delimitersで 対応する括弧の色付けを行なっている時、
    正規表現の中の「|」パイプラインにより、色付けが誤作動します。
    これは、Emacsのscheme.elの中の パイプラインに対する処理を
    除外することで防ぐことができます。

  ・変更には 管理者の権限が必要なので、
    「sudo -」で いったん スーパーユーザーになります。

  ・ディレクトリを移動します。
    私の場合は Emacsのバージョンが23.3.1だったので、
    次のディレクトリに移動しました。
      cd /usr/share/emacs/23.3/lisp/progmodes

  ・次のコマンドを行ないます。
      cp -p scheme.el.gz scheme.el.gz.org
      mv scheme.elc scheme.elc.org
      gunzip scheme.el.gz

  ・スーパーユーザーの状態で、「emacs &」で emacsを起動します。

  ・/usr/share/emacs/23.3/lisp/progmodes/scheme.elのファイルを開きます。

  ・scheme.elの91行目です。 次のようになっています。
    (modify-syntax-entry ?\| "\" 23bn" st)

  ・その91行目を無効化するために 次のように書き換えて、保存します。
    ;;(modify-syntax-entry ?\| "\" 23bn" st)

  ・scheme.el を コンパイルして、scheme.elc を 作り直します。
    次のWebページを参考にしてください。
    「Emacs のバイトコンパイル | プログラマーズ雑記帳」
        http://yohshiy.blog.fc2.com/blog-entry-22.html



◆  Gaucheから C言語のライブラリを使う件について。
  ・「Gauche:c-wrapper関連」
      https://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3Ac-wrapper%E9%96%A2%E9%80%A3

  ・「GitHub - Hamayama/c-wrapper-mg: Gauche 用の c-wrapper を MinGW 上で
                                              動くように改造したものです(実験中)」
        https://github.com/Hamayama/c-wrapper-mg

  ・「 FFI (Foreign Function Interface) とは」
        https://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3AFFI



◆  C言語からGaucheを使う件について。
  ・「 C言語からGaucheを使おう! (1) コンパイル環境を整える TECHSCORE BLO」
        http://www.techscore.com/blog/category/%e8%a8%98%e4%ba%8b/%e9%80%a3%e8%bc%89/c%e8%a8%80%e8%aa%9e%e3%81%8b%e3%82%89gauche%e3%82%92%e4%bd%bf%e3%81%8a%e3%81%86%ef%bc%81/



◆  CGIのプログラムに Gaucheを使う件について。
  ・「GaucheでCGIプログラミング」
        https://www.slideshare.net/kazh98/gauchecgi

  ・「日付から曜日を求めるCGIプログラム」
        http://www.atmarkit.co.jp/ait/articles/0812/17/news149_4.html

  ・「Gauche:CGI - WiLiKi」
        https://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3ACGI



◆  GaucheからGUIを使う件について。
  ・GaucheからGTK2を使うための拡張ライブラリの件についてです。
    ページ先頭から3割ほど進んだ所の「Gauche-gtk」の項目に書いてあります。
      http://practical-scheme.net/index-j.html#libs



◆  Gaucheでグラフィック描画を行なう件について。

  ・GaucheからOpenGLを使うための拡張ライブラリの件についてです。
    ページ先頭から3割ほど進んだ所の「Gauche-gl」の項目に書いてあります。
      http://practical-scheme.net/index-j.html#libs

  ・「Gauche:Gauche-glサンプル」
      https://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3AGauche-gl%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB

  ・Gauche-glを動かすためには freeglutというC言語のライブラリが必要です。
    以下の話は VineLinux6.3 および 6.5 の時代の話なのですが、
    VineLinux6.3には freeglutのバージョン2.6.0がありました。
    けれど、VineLinuxのfreeglut 2.6.0では、動作しませんでした。

  ・freeglut2.8.1のソースをwebから ダウンロードして コンパイルしたところ、
    glutが 動作するようになりました。
      「The freeglut Project :: About」
          http://freeglut.sourceforge.net/
    ただし、VineLinux6.3と6.5 へのインスールの際には 問題があり、
    問題を回避するような手順が必要になってきます。
    以下に その手順を書いておきます。

  ・freeglut2.8.1をインストールするために、
    VineLinuxのfreeglutのパーッケージを削除しようとしたのですが、
    apt-getのコマンドが パッケージの依存関係がおかしくなっていると
    エラーを出すようになってしまいました。
    なので、VineLinuxのfreeglutのパーッケージを削除するという操作は
    しないようにしました。
    その代わり 下記のような手順を行なうことにしました。

  ・freeglut2.8.1を ソースからコンパイルして、インスールします。
    インストール先は デフォルトでは /usr/local/lib/に なります。

  ・以降の操作は スーパーユーザーで行なってください。
    /usr/lib/下にあるVineLinuxのlibglutをリネームして、
    次の名前に変更しました。
        libglut.so.3.9.0.vine  libglut.so.3.vine  libglut.so.vine

  ・次の操作をします。
      # cd /usr/lib
      # ln -s /usr/local/lib/libglut.so.3.9.0 libglut.so
      # ln -s /usr/local/lib/libglut.so.3.9.0 libglut.so.3
      # ln -s /usr/local/lib/libglut.so.3.9.0 libglut.so.3.9.0

  ・操作の結果としては このようになります。
      # ls -l libglut*
      lrwxrwxrwx 1 root root     31 12月 20 17:11 libglut.so ->
                                            /usr/local/lib/libglut.so.3.9.0*
      lrwxrwxrwx 1 root root     31 12月 20 17:11 libglut.so.3 ->
                                            /usr/local/lib/libglut.so.3.9.0*
      lrwxrwxrwx 1 root root     31 12月 20 17:13 libglut.so.3.9.0 ->
                                            /usr/local/lib/libglut.so.3.9.0*
      -rwxr-xr-x 1 root root 314421  3月 27  2011 libglut.so.3.9.0.vine*
      lrwxrwxrwx 1 root root     16 12月 20 16:56 libglut.so.3.vine ->
                                                         libglut.so.3.9.0*
      lrwxrwxrwx 1 root root     16 12月 20 16:56 libglut.so.vine ->
                                                         libglut.so.3.9.0*



◆  エディタやドキュメント・ブラウザで ユーザーリファレンスを
    見るという件について。

  ・「Gaucheのユーザーリファレンスを呼び出す - (define -ayalog '())」
        http://ayato.hateblo.jp/entry/20130509/1368124378

  ・「紫ログ: Emacs上でGaucheのinfoを引く」
        http://blog.livedoor.jp/naoya_t/archives/51350496.html

  ・「Gauche:マニュアルにアクセス」
       https://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3A%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9

  ・「GaucheのドキュメントをDashに追加する - ぼっち勉強会」
        http://kannokanno.hatenablog.com/entry/2017/05/04/161642

    ・Dashというのは Macのオフラインのドキュメント・ブラウザの事だそうです。
      関連するwebページとして 次のwebページがありました。
      「Zeal - Linux, Windowsで使えるオフラインドキュメントブラウザ」
          http://syohex.hatenablog.com/entry/20131104/1383544614

  ・Gauche本家サイトのGaucheのソースは 2018年8月時点で
    http://practical-scheme.net/vault/ の Gauche-0.9.6.tgz です。
    ドキュメントの根本の情報が含まれているようです。



◆  表計算ソフトで出力されるCSV形式のファイルをGaucheで扱う件について。

  ・「Gauche で CSV 形式のデータを読み込む 」
        http://www.serendip.ws/archives/2676

  ・「Gauche で CSV 形式のデータをソートする」
        http://www.serendip.ws/archives/2682

  ・「CSVテーブル - Gauche ユーザリファレンス」
         http://practical-scheme.net/gauche/man/?l=ja&p=text.csv



◆  HTMLファイルを解析(パーズ、parse)する件について。

  ・「html-parserをGaucheに移植」
        http://practical-scheme.net/wiliki/wiliki.cgi?%E9%BD%8A%E8%97%A4
      ページ先頭から1割ほど進んだ所の「html-parser」の章に書いてあります。

      ・「#:g1: html-parserの紹介」
        http://g000001.cddddr.org/3617797200


  ・「Scheme:htmlprag - WiLiKi」
        https://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3Ahtmlprag

      ・自分で調べてみたのですが、すみません、htmlpragは もう無いんですね。
        htmlpragの後継の物は 次のWebページの物のようです。
        Scheme言語の1つであるRacket用のライブラリです。
        「html-parsing (Permissive Parsing of HTML to SXML) - Racket」
            https://docs.racket-lang.org/html-parsing/index.html

      ・そのライブラリは Racket用のパッケージとして、1つの圧縮ファイルに
        まとめられていました。
        「html-parsing - package - Racket」
            https://pkgs.racket-lang.org/package/html-parsing


  ・「SXML - WiLiKi」
        https://practical-scheme.net/wiliki/wiliki.cgi?SXML

  ・「SXMLからマークアップへの変換 - Gaucheリファレンス」
        http://practical-scheme.net/gauche/man/?l=ja&p=SXML%e3%81%8b%e3%82%89%e3%83%9e%e3%83%bc%e3%82%af%e3%82%a2%e3%83%83%e3%83%97%e3%81%b8%e3%81%ae%e5%a4%89%e6%8f%9b

  ・「SXMLからXMLとXHTMLのシリアライゼーション - Gaucheリファレンス」
        http://practical-scheme.net/gauche/man/?l=ja&p=sxml.serializer

  ・「k16's note: はじめてでも安心 SXML入門」
        http://note.golden-lucky.net/2011/08/sxml.html





hasu

unread,
Aug 18, 2018, 6:04:26 AM8/18/18
to Vine Linux ユーザーフォーラム
hasuです。

GoogleグループのWebページで見た場合ですが、
文章が長過ぎて、スクロールバーが
ウィンドウの外枠の所と 内側のウィンドウの所と 2箇所ついてますね。

内側のウィンドウのスクロールバーもスクロールさせないと
文章の最後まで見られないので、ご注意を。



Reply all
Reply to author
Forward
0 new messages