我可以在终端中运行以下代码,该代码位于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:输入“|”的解析错误 *主>
答案 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
。
很确定这是问题所在。