/ bin / sh:1:./respondPalindromes:not found - 这是什么意思?

时间:2012-08-07 00:50:54

标签: haskell emacs haskell-platform haskell-mode

我可以在终端中运行以下代码,该代码位于respondPalindromes.hs文件中,但未能在emacs中对其进行测试。

  

respondPalindromes = unlines。 map(\ xs - > if isPalindrome xs然后“palindrome”否则“不是回文”)。线
     其中isPalindrome xs = xs ==反向xs
  main =互动responsePalindromes

以下是终端详情:

  

optimight @ optimight:〜$ cat words.txt | runhaskell respondPalindromes.hs
  不是回文
  回文
  回文
  回文

以下是Emacs haskell模式的详细信息:

  

*主> :加载“/home/optimight/respondPalindromes.hs”
  [1/1]编译Main(/home/optimight/respondPalindromes.hs,解释)
  好的,加载的模块:Main。
  *主> ! cat words.txt | ./respondPalindromes.hs
  / bin / sh:1:./ responsedalindromes.hs:权限被拒绝   *主> ! cat words.txt | ./respondPalindromes
  / bin / sh:1:./ responsedalindromes:未找到
  *主>

在Dietrich Epp的回答后编辑:

  

*主> !:cat words.txt | runhaskell respondPalindromes.hs
  :12:1:输入`!:'

时解析错误      

*主> cat words.txt | runhaskell respondPalindromes.hs
  :13:15:输入“|”的解析错误   *主>

2 个答案:

答案 0 :(得分:4)

在常规终端窗口中,运行以下命令:

cat words.txt | runhaskell respondPalindromes.hs

但是在Haskell窗口中,您运行以下shell命令:

cat words.txt | ./respondPalindromes.hs

为什么运行不同的命令,如果第一个命令工作正常?

这些只是普通的shell命令。如果您尚未将respondPalindromes.hs设置为可执行文件,那么它将不会作为可执行文件运行,您必须使用runhaskell才能执行它。

此外,如果以这种方式运行程序(通过从Haskell交互式shell中执行shell命令),使用花哨的Haskell shell是没有意义的。你可能也在使用普通的shell。

相反,您可能希望完全避免使用shell,例如:

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

Haskell中的>>=运算符有点像shell中的|管道。

摘要: :!命令执行普通的shell命令,它与Haskell没有任何关系。

答案 1 :(得分:0)

我不知道haskell但是在命令行上你正在执行runhaskell respondPalindromes.hs但在emacs内你正在运行./respondPalindromes.hs

很确定这是问题所在。