2016-08-27 13 views
3

RacketでPythonコードとライブラリを使用できますか?私はPyR(https://github.com/pedropramos/PyonR)をDrRacketにインストールしたので、 "#lang python"を選択してPythonコードを実行することができます。しかし、アプリケーションにRacketとPythonの言語コードをどのように組み合わせることができますか?RacketでPythonライブラリを使用

https://github.com/nurv/pnilにはPythonからLispへの限定翻訳者もあります。ラケットには何か類似していますか?


編集:コメントに記載されているとおり、私は次のようにしました。ファイル内のこのPythonコード「pysamples.rkt」DrRacketに適しています:

#lang python 

def greet(name): 
    print 'Hello', name 

greet('Alfred') 

出力:

Hello Alfred 

私はラケットコードで定義の上に使用してみましたが、それはうまくいきませんでした。以下のラケットコードです:

#lang racket 
; (require python/config) (enable-cpyimport!) ; ran this once; worked. 

(#%require "pysamples.rkt") 
(greet "Racket_code") 

エラーは次のとおりです。

greet: unbound identifier in module in: greet 
+0

私はそれを試していないが、' cpyimport'は、あなたがやりたいのか? –

+0

しかし、これはPythonでRacketモジュールを使用しているようです。私はラケットコードで使用するためにPythonモジュールをインポートできますか? – rnso

答えて

3

PyonRプロジェクトは、私が知っているラケットのPythonライブラリを使用するためのもっとも準備が整った方法です。しかし、PythonライブラリとPythonライブラリで書かれたPythonライブラリの違いは、Cライブラリの上にあるPythonの薄いレイヤです。あなたが経験したように、後者のタイプは働いていません(少なくとも私の知る限り - しかし、ペドロは尋ねるものです)。

言語Xで書かれたライブラリ(XはPythonでも構いません)を使用する必要がある場合は、言語XでRacketプログラムからのメッセージを待つ「リスナー」プログラムを書くことができます。答えを計算し、それをRacketプログラムに返します。どのようにメッセージを送受信するかはあなた次第ですが、簡単なオプションは、Racketが書き込み、Xを読み込む2つのファイルと、Racketが受け取るもう1つの "X-to-R"メッセージ。

このアプローチにはオーバーヘッドがありますが、メッセージの送信よりも計算に時間がかかる場合は、実行可能な解決策です。

+0

"#lang python"でDrRacketを使用することのメリットはありますか?他のエディタでPythonを使用する利点は何ですか? (私はDrRacketのメリットについて編集者として質問していません)。 – rnso

3

Accoring to the readmeあなたのpythonに2.7のパッケージをインポートすることができますが、cpyimportを使用する必要があります。コード、あなたはそれがラケットのパスにだと#lang pythonトップラインを与えられたことをただ輸入与えることができる純粋なPythonライブラリを見てみると

#lang python 
cpyimport numpy as np 
from "racket" import time 

    def add_arrays(n): 
     result = np.zeros((100,100)) 
     for i in range(n): 
      result += np.random.randint(0, 100000, (100,100)) 
     return result 

    print time(add_arrays(10000)) 

:例の一つは、このようになります。定義されたものは常にエクスポートされます。

+0

上記のファイルの名前がmypyの場合。rkt、このファイルをラケットコードファイルに含めることはできますか? "(#%require" mypy.rkt ")"そこにすべてのnumpy関数を使用するには? – rnso

+0

ラピットからcpyimportが有効になっています。しかし、上記のコードを実行しようとすると、DrRacketがクラッシュして終了します。上記のコードで試してみるたびに発生します。 – rnso

+0

コマンドラインから実行している場合:$ racket mypy.rkt、次のエラーが発生する:SIGSEGV MAPERR si_code addr 0x4で1フォルト、Aborted – rnso

1

前回の回答やコメントは、特定のPythonライブラリの困難に対処していますが、ラケットモジュールで純粋なPythonのファイルから機能を使用することにだけ興味があるなら、このような何かしてみてください:「ファイルで

を挨拶.py ":ラケットで

#lang python 

def greet(name): 
    print 'Hello', name 

#lang racket 

(require python) 
(py-import "greetings" as python-module) 

(py-method-call python-module "greet" "Racket") 
関連する問題