/bin/sh: 1: ./respondPalindromes: не найдено - что это значит?
Я могу запустить приведенный ниже код в терминале, который находится в файле responsePalindromes.hs, но не смог протестировать то же самое в emacs.
responsePalindromes = unlines . map (\xs -> если isPalindrome xs, то "палиндром", иначе "не палиндром") . линии
где isPalindrome xs = xs == обратный xs
main = взаимодействовать
Ниже приведены детали терминала:
optimight @ optimight: ~ $ cat words.txt | runhaskell responsePalindromes.hs
не палиндром
палиндром
палиндром
палиндром
Ниже приведены подробности режима haskell в Emacs:
*Main>: загрузить "/home/optimight/respondPalindromes.hs"
[1 из 1] Компиляция Main ( /home/optimight/respondPalindromes.hs, интерпретировано)
Хорошо, модули загружены: Main.
*Main>:! cat words.txt |./respondPalindromes.hs
/ bin / sh: 1:./respondPalindromes.hs: разрешение отклонено
*Main>:! cat words.txt |./respondPalindromes
/ bin / sh: 1:./respondPalindromes: не найдено
*Main>
Изменить после ответа Дитриха Эппа:
*Main>!: Cat words.txt | runhaskell responsePalindromes.hs
: 12: 1: ошибка разбора на входе `!: '*Main> cat words.txt | runhaskell responsePalindromes.hs
: 13: 15: ошибка разбора на входе `| '
*Main>
2 ответа
В обычном окне терминала вы запускаете эту команду:
cat words.txt | runhaskell respondPalindromes.hs
Но в окне Haskell вы запускаете следующую команду оболочки:
cat words.txt | ./respondPalindromes.hs
Зачем запускать другую команду, если первая работает нормально?
Это просто обычные команды оболочки. Если вы не настроили respondPalindromes.hs
как исполняемый файл, то он не будет работать как исполняемый файл, вы должны использовать runhaskell
чтобы выполнить его.
Кроме того, если вы запустите программу таким способом (выполнив команду оболочки из интерактивной оболочки Haskell), нет смысла использовать необычную оболочку Haskell. Вы могли бы также использовать обычную оболочку.
Вместо этого вы можете вообще избежать оболочки, например:
readFile "words.txt" >>= respondPalindromes >>= putStr
>>=
Оператор в Haskell вроде как |
труба в оболочке.
Резюме: :!
Команда выполняет обычную команду оболочки, она не имеет ничего общего с Haskell.
Я не знаю haskell
но в командной строке вы выполняете runhaskell respondPalindromes.hs
но внутри emacs
ты бегаешь ./respondPalindromes.hs
,
Уверен, что это проблема.