#:g1: f2clの紹介

Posted 2014-05-01 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の122日目です。

f2clとはなにか

 f2clは、ニュージーランドのワイカト大学で1993頃に開発されていたFortranからCommon Lispへのトランスレータです。

パッケージ情報

パッケージ名f2cl
Quicklisp
プロジェクトサイトclocc: f2cl
CLiKihttp://cliki.net/f2cl
Quickdocshttp://quickdocs.org/f2cl

インストール方法

(ql:quickload :f2cl)

 CLOCCに収蔵されているようではありますが、Quicklispでもインストール可能です。

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

hello.f
      subroutine hello
      print *,"おはよう日本"
      end

のようなファイルがあったとすれば、

(defpackage :f2cl-test 
  (:use :cl)
  (:export :hello))

(f2cl:f2cl "/tmp/hello.f" :output-file "/tmp/hello.lisp" :package :f2cl-test)

のようにすると

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)))

というようなファイルが生成されるので、コンパイルしてロードすれば、

(f2cl-test:hello)
;>>  おはよう日本
;=>  <no values>

のように実行できます。

 またf2clには、blas等プロジェクトがASDFのシステムファイル付きで付属して来ますので、大きな規模のものの変換具合もみれるかと思います。

(ql:quickload :colnew)

等々

関連

まとめ

 今回は、f2clを紹介してみました。
f2clは80年代の物かと思っていましたが、90年代後半辺まで研究がされていたのが意外でした。
Fortran->Lispといえば、さらに古くは、70年代後半のKent Pitman氏の

なんていうのもありますね。

comments powered by Disqus