先日のエントリでf2cl とは でも眺めてみたけどもう一度。
#:g1: f2clの紹介 の情報からイロイロ引用しながら整理する。
概要
Fortran のプログラムを、Lispのプログラムへ変換するライブラリの様です。
FortranからCommon Lispへのトランスレータです。
※ #:g1: f2clの紹介 参照
変換?
以下のような hello.f を変換すると hello.lisp が出力される様です。
! hello.f subroutine hello print *,"おはよう日本" end
;;; hello.lisp ;;; Compiled by f2cl version: ;;; ("f2cl1.l,v 95098eb54f13 2013/04/01 00:45:16 toy $" "f2cl2.l,v 95098eb54f13 2013/04/01 00:45:16 toy $" "f2cl3.l,v 96616d88fb7e 2008/02/22 22:19:34 rtoy $" ;;; "f2cl4.l,v 96616d88fb7e 2008/02/22 22:19:34 rtoy $" "f2cl5.l,v 95098eb54f13 2013/04/01 00:45:16 toy $" "f2cl6.l,v 1d5cbacbb977 2008/08/24 00:56:27 rtoy $" ;;; "macros.l,v 1409c1352feb 2013/03/24 20:44:50 toy $") ;;; Using Lisp SBCL 1.1.18 ;;; ;;; Options: ((:prune-labels nil) (:auto-save t) (:relaxed-array-decls t) (:coerce-assigns :as-needed) (:array-type ':array) (:array-slicing t) ;;; (:declare-common nil) (:float-format single-float)) (in-package :f2cl-test) (defun hello () (prog () (declare) (f2cl-lib:fformat t :list-directed "おはよう日本") end_label (return (values)))) (in-package #-gcl #:cl-user #+gcl "CL-USER") #+#.(cl:if (cl:find-package '#:f2cl) '(and) '(or)) (eval-when (:load-toplevel :compile-toplevel :execute) (setf (gethash 'f2cl::hello f2cl::*f2cl-function-info*) (f2cl::make-f2cl-finfo :arg-types 'nil :return-values 'nil :calls 'nil)))
変換の方法
以下の様なコードで変換できるようです。
(defpackage :f2cl-test (:use :cl) (:export :hello)) (f2cl:f2cl "/tmp/hello.f" :output-file "/tmp/hello.lisp" :package :f2cl-test)
ASDFシステム
quickdocs を参考に表にしてみる。
こう見てみると Fortran to Common Lisp のコンバータとそれプラス、フォートランのいくつかのライブラリを既に変換している雰囲気。
system | description |
---|---|
f2cl | F2CL: Fortran to Lisp converter |
colnew | F2CL conversion of COLNEW: Solution of boundary-value problems for ODEs |
fishpack | F2CL conversion of FISHPACK: Solution of separable elliptic PDEs |
hompack | F2CL conversion of HOMPACK: Solution of non-linear systems of equations by homotopy methods. |
minpack | F2CL conversion of MINPACK: Solutions to non-linear equations and least-squares problems |
quadpack | F2CL conversion of QUADPACK: Adaptive numerical integration |
toms419 | F2CL conversion of TOMS 419: Zeroes of a complex polynomial |
toms717 | F2CL conversion of TOMS 717: Max- and quasi-likelihood estimation in non-linear regressio |
blas-complex | BLAS routines for complex double-float matrices |
blas-hompack | |
blas-package | Package definition for BLAS |
blas-real | BLAS routines for real double-float matrices |
lapack |
変換しているフォートランのいくつかのライブラリ
それぞれのライブラリの概要を適当に調査。
以下の様子であるため日本語は変だとおもう。。。。
- リンクになっているものの description はそのサイトをGoogle先生で直接翻訳したものをコピペ。
- リンクになっていないものは、上のASDFシステムの description をGoogle先生で直接翻訳をコピペ。
name | description |
---|---|
BLAS | 難しく言うと基本的な線形演算のライブラリ、 簡単にいえば行列やベクトルの基本的な計算をやってくれる関数群です。 |
LAPACK | 高性能線形代数パッケージです。 連立一次方程式、最少二乗問題、固有値問題、特異値問題を解くためのサブルーチンが含まれています。 |
COLNEW | 常微分方程式のための境界値問題の解法ライブラリ |
FISHPACK | 円型偏微分方程式の解のための効率的なFORTRANサブプログラム |
HOMPACK | ホモトピーの方法により、非線形方程式系を解くためのサブルーチン |
MINPACK | 非線形方程式のシステムを解くライブラリであり、 または線形または非線形方程式のセットの残余の最小二乗最小化を行います。 |
QUADPACK | 数値積分を使用して積分を推定するライブラリ |
TOMS 419 | 複雑な多項式の零点ライブラリ |
TOMS 717 | 非線形回帰におけるMAX-と準尤推定ライブラリ |
恐らく、上記のFortranのライブラリが変換されたファイル/関数がそれぞれのASDFシステムに入っているのだろう。と認識。
おわり
なんとなく概要が理解できた気になったので終り。
今関係するのは BLAS, LAPACK の二つなので次回はそれぞれのパッケージを眺めてみるか。
まずは BLAS かな。