5

私は初めて関数型プログラミング言語を学んでいますが、最初のロジスティクスに問題があります (教授は基本的に「何とかセットアップしてください」と言って、あまり詳細を提供しませんでした)。

とにかく、私は Mac OS X バージョン 10.6.8 を持っています。まず、GHC をホーム ディレクトリにインストールし、ターミナルで「ghci」コマンドを使用して開くことができることを確認しました。そこから (まったくの知識不足で申し訳ありません)、シラバスのあいまいな指示に従い、別のウィンドウを開いて、課題のために変更する a1.hs ファイルを開きました。関数の定義が完了したら、「ghc a1-skeleton.hs」というコマンドを入力して、インタープリターを開き、その関数を読み込んでみました (それが私がやっていることですよね?) が、次のエラーが発生しました:

a1.hs:5:8:
    Could not find module `System'
    It is a member of the hidden package `haskell98-2.0.0.1'.
    Use -v to see a list of the files searched for.

これは、C++ のような言語で「#include」または類似のものを欠いているようなものだと思います。特定のディレクトリに何かを検索/追加する必要があるだけですか?

また、私はこのようなことをすぐに理解できなかったので、通訳者は正確に何をしますか? 手続き型言語の意味で「コンパイル」をスキップして、.hs ファイル内のコマンドをすぐに実行しようとするプログラムですか?

ありがとう!

更新::問題と思われるコード:

  2 module Main where
  3 
  4 import Test.HUnit
  5 import System
4

5 に答える 5

8

問題はおそらく、Systemモジュールが古い非階層的な名前であることです。System.Environment(インポートする正確な機能に応じて)のようなモジュールを使用する必要があると思います。

これらのモジュールの関数を使用していないため、何をインポートすればよいか正確にはわかりません。GHCi では、モジュールが定義する関数を次のように表示できます。

Prelude> :browse System.Environment
getArgs :: IO [String]
getEnv :: String -> IO String
getEnvironment :: IO [(String, String)]
getProgName :: IO String
withArgs :: [String] -> IO a -> IO a
withProgName :: String -> IO a -> IO a

import Systemステートメントを削除してファイルをロードしてみてください。その後、スコープ外の識別子をいくつか取得する必要があります。これで、これらをHoogleに入力して(偶然にも、Hoogle が親友になります)、定義されている場所を確認できます。

私の理解では、古いSystemモジュールの関数は現在System.EnvironmentSystem.ProcessおよびにありSystem.Exitます。あまり深く考えたくない場合は、3 つすべてをインポートできます:P.

于 2012-09-04T01:00:26.943 に答える
3

GHC をインストールしたところです -- おそらく代わりにHaskell Platformをインストールしたいと思うでしょう-- これは GHC の「バッテリー付き」バージョンです。必要な多くのパッケージが付属しており、cabalHaskell のパッケージ マネージャーである も提供します。このようにして、他の方法で遭遇する多くの「モジュールが見つかりませんでした」エラーを回避できます。

ワンクリックでインストールできることも問題ありません。

于 2012-09-04T01:40:52.210 に答える
2

あなたのマイナーな質問について:

ghciもコンパイルを行いますが、非対話型ghcとは異なり、効率的なマシンコードを作成せず、代わりに、直接解釈されるより単純な内部バイトコードにコンパイルします。基本的に、ghciは、結果を高速に実行するのではなく、(迅速な開発を望むように)迅速なコンパイルを行うために最適化されています。

さらに、read-eval-printループやデバッガーなど、インタラクティブに使用できるその他の便利な機能が含まれています。

于 2012-09-04T02:28:04.813 に答える
2

ghci -package haskell98 a1-skeleton.hsターミナルで開いてみてください。うまくいかない場合はa1-skeleton.hs、質問に full を含めてください。

于 2012-09-04T00:57:39.857 に答える
1

1) GHC だけではなく、haskell プラットフォームをインストールすることをお勧めします。cabal-install が利用できない状態で作業するのは面倒で、特に最近の ghc バージョンではビルドが必ずしも容易ではありません。

2) ghc は洗練されたパッケージング システム - cabal を使用します。Systemモジュールは Haskell98 パッケージによってエクスポートされます。これはデフォルトでマスクされており、明示的に有効にする必要があります。ghc と ghci の場合は、-packageスイッチを使用して行われます (ghc のオンライン ドキュメントを参照してください)。

3 )baseまたは.Haskell98Haskell2010

===

ghci はソースをバイトコードにコンパイルしますが、これはデフォルトではディスクに保存されません。また、必要に応じて外部ライブラリ/パッケージをリンクし、特定のケースでは失敗する場合があります。

于 2012-09-04T10:15:06.057 に答える