Calling Sage from Haskell
我想从 Haskell 调用一些 sage 代码。以下代码使用 cpython 调用纯 python 脚本:
test.py:
1 2 | def pytest(): return 3.5+2 |
Main.hs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import qualified CPython as Py import qualified CPython.Protocols.Object as Py import qualified CPython.Types as Py import qualified CPython.Types.Module as Py import qualified CPython.System as Py import qualified CPython.Types.Float as Py import qualified Data.Text as T import GHC.IO.Handle.FD import Data.Maybe main :: IO () main = do Py.initialize path <- Py.getPath Py.setPath $ T.pack $".:" ++ T.unpack path -- path to the module to load test <- Py.importModule $ T.pack"test" uname <- Py.getAttribute test =<< (Py.toUnicode (T.pack"pytest")) res <- Py.callArgs uname [] Py.print res stdout res' <- Py.fromFloat =<< fromJust <$> Py.cast res print $ (res' + 2.0 :: Double) |
当我编译 Main.hs 并运行它时,我得到了预期的输出:
1 2 | 5.5 7.5 |
如果我将
有谁知道如何使 cpython 与 sage 一起工作,或者以任何其他方式从 Haskell 调用 sage 脚本?
真正的问题是您使用的是"哪个"Python; Sage 使用自己的 Python,而不是您的系统 Python。您可能想尝试从
建立链接
1 2 3 4 | $ pwd; local/bin/python --version /Users/.../Downloads/sage Python 2.7.10 $ |
原则上,这是您需要链接到的那个。在实践中,您可能想阅读有关更多链接的 Sage 文档,或其他有关运行脚本的博客文章。但无论如何,只有 Python 可以使用