0

私はrespondPalindromes.hsファイルにあるターミナルで以下のコードを実行できますが、emacsで同じものをテストできません。

responsePalindromes=unlines。map(\ xs-> if isPalindrome xs then "palindrome" else "not a palindrome")。isPalindrome
xs =xs==逆
xsmain=相互作用respondPalindromesである行

以下はターミナルの詳細です。

optimight @ optimight:〜$ cat words.txt | runhaskellrespondPalindromes.hsはパリンドローム
ではありませんパリ
ンドロームパリンドローム
パリ
ンドローム

以下はEmacsのhaskellモードの詳細です:

* Main>:load "/home/optimight/respondPalindromes.hs"
[1/1] Mainのコンパイル(/home/optimight/respondPalindromes.hs、インタプリタ)
OK、ロードされたモジュール:Main。
*メイン>:!猫words.txt| ./respondPalindromes.hs
/ bin / sh:1:./respondPalindromes.hs:アクセスが拒否されました
*メイン> :!猫words.txt| ./respondPalindromes
/ bin / sh:1:./respondPalindromes:見つかりません
*メイン>

ディートリッヒエップの答えの後に編集:

*メイン>!:cat words.txt | runhaskell responsePalindromes.hs
:12:1:入力 `!:'の解析エラー

*メイン>猫words.txt| runhaskell responsePalindromes.hs
:13:15:入力`|'の解析エラー
*メイン>

4

2 に答える 2

4

通常のターミナルウィンドウで、次のコマンドを実行します。

cat words.txt | runhaskell respondPalindromes.hs

ただし、Haskellウィンドウでは、次のシェルコマンドを実行します。

cat words.txt | ./respondPalindromes.hs

最初のコマンドが正常に機能するのに、なぜ別のコマンドを実行するのですか?

これらは単なる通常のシェルコマンドです。実行可能ファイルとして設定していない場合はrespondPalindromes.hs、実行可能ファイルとして実行されませんrunhaskell。実行するには、を使用する必要があります。

さらに、この方法でプログラムを実行する場合(Haskellインタラクティブシェル内からシェルコマンドを実行することにより)、派手なHaskellシェルを使用する意味はありません。通常のシェルを使用した方がよいでしょう。

代わりに、次のようにシェルを完全に避けたい場合があります。

readFile "words.txt" >>= respondPalindromes >>= putStr

Haskellのオペレーターは、シェル>>=のパイプのようなものです。|

概要:この:!コマンドは通常のシェルコマンドを実行しますが、Haskellとは何の関係もありません。

于 2012-08-07T01:20:48.913 に答える
0

わかりませんhaskellが、コマンドラインでは実行していますがrunhaskell respondPalindromes.hs、内部emacsでは実行しています./respondPalindromes.hs

それが問題であることは確かです。

于 2012-08-07T00:53:45.690 に答える