我是Haskell的初学者,我正在尝试创建一些小的算法来理解Haskell的语法,我试图编写和编译一个快速排序算法,但是它在编译时给了我一个错误。
quicksort [] = []
quicksort (x:xs) = quicksort small ++ (x : quicksort large)
where small = [y | y <- xs, y <= x]
large = [y | y <- xs, y > x]
有人能帮我理解为什么我在代码的第2行出现这个错误吗?parse error on input ‘=’parser。
我试图声明局部变量(在haskell的情况下,这是正确的术语吗?)在haskell中使用where和let子句。然而,每当我的子句超过一行时,我总是会得到一些解析错误:
> letExample :: Int -> Int
> letExample 0 = 0
> letExample n =
> let one = 1
> four = 4
> eight = 8
> in one*four*eigh
我对Haskell是非常非常陌生的,我正在努力理解Haskell的语法(以及习惯于声明式语言)。我已经创建了一个树数据类型,我希望能够使用==运算符对它们进行比较。这就是我所拥有的:
data Tree =
Leaf
| Twig
| Branch Tree Tree Tree
deriving Show;
instance Eq Tree where
Leaf == Leaf = True;
(Branch a b c) == (Branch a1 b1 c1) = a==a1 && b==b1 && c==c1;
这在输
我正尝试在Haskell中定义我自己的类型,称为Name,它只是一个String (我单独定义它,以使我的代码更具可读性)。我只是像这样写代码:
type Name = String
但是当我在GHCI上运行保存在其中的文件时,我得到了一个错误,说"parse error on input ` `type'“。为什么我会得到这个错误?
完整代码:
module Names where import PhoneBook
type Name = String
我是Haskell的初学者,想开始用它解决问题,所以我尝试解决第一个SPOJ问题(问题代码: TEST)。“问题”是读行并打印,直到"42“出现。
main = do input <- getLine
if input == "42" then putStr ""
else do putStrLn input
main
我的解决方案非常简单,但是在输入'if‘时会出现一个解析错误。当我在开头和其他语句中将'main‘改为'main2’时,一切正常。
我在Windows 7上运行GHC版本7.8.3。
好吧,这不是花哨的代码片段。我只是不想成为一个菜鸟,而是以一种与副作用语言的结构有点相似的方式来编译一些东西。
我有以下代码:
main =
do {
let x = [0..10];
print x
}
,即关键字do是花式一元表达式的高级语法糖。当我试图编译它时,我会得到以下错误:
main.hs:4:1: parse error on input 'print'
我在上了解到,Haskell中的选项卡是邪恶的,所以我尝试忽略它们:
main =
do {
let x = [0..10]
所以我是Haskell的新手,我一直在尝试实现寻找最小互质数的函数。我还有另一个计算GCD的函数。 我已经尝试了各种方法来实现我的功能,然而,它们都失败了。 smallestCoPrimeOf :: Int -> Int
smallestCoPrimeOf a
| gcd a b == 1 = b
| otherwise = gcd a (b+1) 或将最后两行替换为 b = 2
if (gcd a b) == 1
then b
else gcd a (b+1) 或 let b = 2
if (gcd a b) == 1 then b else gcd a
我之所以选择使用Haskell是因为它的。这给了我更多的信息在编译时,我的程序,帮助我有信心,它是健全的。
此外,看来Haskell是接近的最佳语言,如。(与Clojure协议相反-它只能在第一个参数上发送)。
当我探索像read这样的Haskell多态返回值函数时
read :: (Read a) => String -> a
有以下程序:
addFive :: Int -> Int
addFive x = x + 5
main :: IO ()
main = do
print (addFive (read "11"))
putStrLn
我对Haskell完全陌生,我试着在课堂讲稿中遵循这个脚本。我创建了一个名为lecture.hs的文件
root (a, b, c) = ((-b -r)/e, (-b + r)/e))
where d = b*b - 4*a*c
r = sqrt d
e = 2*a
当我将这个文件加载到拥抱时,它会显示
ERROR "lecture.hs":3 - Syntax error in input (unexpected `=')
当我把它加载到ghci时,它会显示
[1 of 1] Compiling Main ( l
我已经安装了Haskell编译器。
我使用CMD,我输入ghci并得到Haskell提示符Prelude>
以下所有示例都有效:
Prelude> "Hello, World!" "Hello, World!"
或
Prelude> let fac n = if n == 0 then 1 else n * fac (n-1) Prelude> fac 42 1405006117752879898543142606244511569936384000000000
我试着运行这段代码:
import Data.Numbers.Primes
我刚刚开始使用wikibook学习Haskell,到目前为止做得很好,因为我已经用Visual basic和Java学习了非常基础的HS课程,但Haskell的一些奇异功能在尝试组合多个功能时会让我感到困惑。其中一本wikibooks在根据用户输入的特定名称编写三个不同的字符串时存在练习问题。这在使用if-then-else语句时很好,但是当我尝试使用卫士时,我在第6行得到一个解析错误。
main = do
putStrLn "What is your name?"
n <- getLine
|(n == "
我在Haskell有个密码。
import Data.List
main = do
putStrLn $ "\nVerify if Exists in a String"
let wordlist = ["monad", "monoid", "Galois", "ghc", "SPJ"]
let tweet = "This is an example tweet talking about SPJ interviewing with Galois"
我正在尝试使用Haskell,并且我是这个编程语言的新手。我正在运行这段代码,它的目的是当函数的整数大于50时打印Greater,而当函数运行时整数小于50时输出greater。
printLessorGreater :: Int -> String
if a > 50
then return ("Greater")
else return ("Less")
main = do
print(printLessorGreater 10)
然而,当我运行代码时,它给了我这个错误:
main.hs
我遇到了两个不同的Haskell模块之间的名称冲突,它们希望使用相同的中缀运算符(<*>)。Haskell 98的报告说
modid.varsym
是被允许的,但是我不能让它工作。下面是Test.hs的全部内容
module Test
where
import qualified Test2 as T
three = T.<*>
和Test2.hs
module Test2
where
(<*>) = 3
但是尝试编译时会出现一条错误消息:
Test.hs:6:12: parse error on input `T.<*>'
我试过T
当我想要重新编译xmonad以更改配置时,我会得到这样的结果:
Implicit import declaration:
Ambiguous module name `Prelude':
it was found in multiple packages: base haskell98-2.0.0.0
Xmonad是通过pacman安装的。当我得到这个错误的时候,我从pacman中删除了xmonad,然后尝试安装xmonad。我再次得到上面的错误,但我能够通过从cabal文件中删除haskell98来解决它。
现在我想用MOD-Q重新配置xmonad,错误再次出现,
我正在从learnyouahaskell.com学习Haskell,有一个例子是这样的:
search :: (Eq a) => [a] -> [a] -> Bool
search needle haystack =
let nlen = length needle
in foldl (\acc x -
> if take nlen x == needle then True else acc) False (tails haystack)
但是当我用GHC尝试这段代码时,它给了我
error: parse error on input
我需要在一个Haskell文件中导出两个模块。现在,我有
module name (important,functions) where
module nameForTesting where
-- the code is here
但是,它给了我这个错误:
filename.hs:5:1: error: parse error on input ‘module’
我该怎么解决这个问题?
我已经写了一个小工具来扩展Haskell模块中的所有拼接,这样我就可以在haskell模块不可用的地方使用haskell模块。为此,我在编译模块时将-ddump-splices选项传递给GHC并捕获结果代码,然后用捕获的代码替换模块中的TH声明。
然而,看起来-ddump-splices并不总是生成可编译的代码。具体来说,它似乎使用了大括号进行布局,但没有在正确的位置添加分号!
下面是我的测试文件中的一个示例-
case dispatch_a3Tg pieces0_a3Tf of {
Just f_a3U6
-> f_a3U6
master0_a
代码的输入是用单词“1”“2”等写成的数字,输出是输入" sum“或"end”时输入的所有数字的总和。"end“也退出程序。
这是我写的代码。
main = addfunc 0
addfunc :: Int -> IO ()
addfunc l = do
{
input <- getLine;
let n = myStrToI input
; if n == -2
then do {
putStrLn("The final sum is: " ++ show (l));
re
我是haskell的新手。我正在尝试写一个gcd可执行文件。
ghc --make gcd
当我编译这段代码时,我得到了以下错误。
Couldn't match expected type `IO b0' with actual type `[a0]'
In a stmt of a 'do' block:
putStrLn "GCD is: " ++ gcd' num1 num2 ++ "TADA...."
In the expression:
do { putStrLn "Hello,World
main = do line <- getLine
let line' = reverse line
putStrLn $ "You said " ++ line' ++ " backwards!"
putStrLn $ "Yes, you really said " ++ line ++ " backwards!"
错误:
$ stack runhaskell "c:\Users\FruitfulApproach\Desktop\Haskell\tes
我正在从learnyouhaskell.com学习Haskell,并在编译我的程序时得到了这个错误消息。
错误:
baby.hs:25:26: error:
parse error on input `='
Perhaps you need a 'let' in a 'do' block?
e.g. 'let x = 5' instead of 'x = 5'
代码:
bump :: [String] -> IO ()
bump [fileName, numberString] = do
像这样的模式:
front :: [a] -> a
front (x:_) = x
front _ = error "Empty list"
在Haskell似乎很常见,但我特别记得当我开始学习Haskell时,我学到了以下内容:
dec :: (Integral a) => a -> a
dec (x+1) = x
dec _ = error "Bottom"
但是,ghc似乎拒绝了这段代码,指出:
Parse error in pattern: x + 1
而hugs则接受了这一点。那么,这是否有效的Haskell,以及为什么这些编
我尝试用Haskell pandoc库生成一个带有数学公式的基本pandoc文件,以验证docx文档在中描述的问题是否与odt文件相同。
但是,当我执行此代码时:
import Text.Pandoc
import Data.Map (fromList)
import qualified Data.ByteString.Lazy as B
import qualified Data.Set as Set
main = do
document <- writeODT WriterOptions{ writerStandalone=False
我已经开始通过Erik的 (和Graham的)学习Haskell。
在第4章的幻灯片中,第13页介绍了n+k模式的模式匹配语法。它特别指出:
在数学中,可以使用n+k模式定义整数上的函数,其中n是整数变量,k>0是整数常量。
pred :: Int -> Int
pred (n+1) = n
当我在REPL中自己尝试这样做时,我会收到一条错误消息:
*Main> let mypred (n+1) = n
<interactive>:65:13: Parse error in pattern: n + 1
类似地,如果我在*.hs文件中尝试它
mypred
我正在使用Visual Studio Express 2012 for Windows Desktop。
我总是收到错误
Error C4996: 'strtok': This function or variable may be unsafe.
Consider using strtok_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details.
当我尝试构建以下代码时:
#include "stdafx.h"
#defi