相关疑难解决方法(0)

GHCi中的多行命令

我在ghci中输入多行命令时遇到问题.

以下2行代码适用于文件:

addTwo :: Int -> Int -> Int
addTwo x y = x + y
Run Code Online (Sandbox Code Playgroud)

但是当我进入ghci时,我会遇到错误.

我也尝试将代码放在里面:{ ... :},但它们也不适用于这个例子,因为这只是将行追加到一行,但不应该是这样.

我使用的是WinGHCi,版本2011.2.0.1

haskell ghci

119
推荐指数
5
解决办法
3万
查看次数

在GHCi中定义函数签名

在Haskell的解释器GHCi中定义函数签名不起作用.从此页面复制示例:

Prelude> square :: Int -> Int

<interactive>:60:1: error:
    • No instance for (Show (Int -> Int)) arising from a use of ‘print’
        (maybe you haven't applied a function to enough arguments?)
    • In a stmt of an interactive GHCi command: print it
Prelude> square x = x * x
Run Code Online (Sandbox Code Playgroud)

如何声明函数签名然后以交互方式在Haskell中给出函数定义?另外:为什么我不能简单地评估函数并Prelude> square在定义后查看其类型(例如)?

haskell ghci

11
推荐指数
3
解决办法
2557
查看次数

Haskell:"'do'结构中的最后一个语句必须是一个表达式"

我正在阅读" 自然语言处理工作程序员 "一书.这本书使用了Haskell,我没有太多的经验.下面的代码在GHCI中引发错误

:{
do
  l <- [0..9]
  ps <- (\x -> [x-1, x+2]) l
  return ps
:}
Run Code Online (Sandbox Code Playgroud)

这是返回的错误消息

The last statement in a 'do' construct must be an expression

我遇到的所有答案似乎都表明这是一个缩进错误,但据我所知,缩进似乎是正确的.任何想法可能是什么问题?

haskell

8
推荐指数
1
解决办法
853
查看次数

如何进入GHCi的新生产线?

我想写一个函数,就像这样

double :: Int -> Int
double x = x + x
Run Code Online (Sandbox Code Playgroud)

问题是我写完第一行后:

Prelude> double :: Int -> Int
Run Code Online (Sandbox Code Playgroud)

我尝试按下回车键进入下一行,但是当我这样做时,我得到:

<interactive>:84:1: Not in scope: `double'
Prelude>
Run Code Online (Sandbox Code Playgroud)

似乎程序执行第一行,但我不想要那个,我希望程序让我写第二行然后才编译并执行

那么,我怎样才能进入Haskell的下一行(我在Mac OS上使用终端)?

haskell

5
推荐指数
1
解决办法
3743
查看次数

Haskell中的多行是什么?一个操作员,一个功能,还有别的什么?

我对Haskell很新,我必须说我很困惑

我正在使用GHCi前奏曲

首先尝试创建一个阶乘

Prelude> factorial 0 = 1
Prelude> factorial n = n*factorial(n-1)
Prelude> factorial 2
*** Exception: stack overflow
Run Code Online (Sandbox Code Playgroud)

最终堆栈溢出.显然递归并没有停止.

Prelude> :t factorial
factorial :: Num t => t -> t
Run Code Online (Sandbox Code Playgroud)

然后阅读这篇文章如何在多行中的ghci中定义一个函数?

我发现我必须使用多行版本或大括号(顺便说一句,这是一个运算符吗?)

Prelude> let { fact 0 = 1 ; fact n = n * fact (n-1) }
Prelude> fact 5
120
Prelude> ::t fact
fact :: (Eq p, Num p) => p -> p
Run Code Online (Sandbox Code Playgroud)

要么

Prelude> :{
Prelude| facto 0 = 1
Prelude| facto n = …
Run Code Online (Sandbox Code Playgroud)

haskell

5
推荐指数
1
解决办法
246
查看次数

GHCi 内的函数定义

是否可以在GHCi中编写带有类型签名的多行函数定义(就像将其编写在源文件中一样)?

\n\n

到目前为止我已经尝试过这样的事情:

\n\n
Prelude> :{\nPrelude| let f :: Int -> Int;\nPrelude| f i = i + 1\nPrelude| :}\n\n<interactive>:9:1: parse error on input \xe2\x80\x98f\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它不起作用...还有什么我可以尝试的吗?

\n

haskell ghci

3
推荐指数
1
解决办法
290
查看次数

haskell interactive中的函数定义

factorial :: Integer -> Integer
factorial n = product [1..n]
Run Code Online (Sandbox Code Playgroud)

以下是好的:

let factorial n = product [1..n]
Run Code Online (Sandbox Code Playgroud)

我没有看到如何在交互式shell中添加类型声明.

haskell types

1
推荐指数
2
解决办法
104
查看次数

Haskell:阶乘函数中的非详尽模式

我尝试在GHCi中实现递归因子函数,但我收到以下错误:

Prelude> fact n = n * fact (n-1)
Prelude> fact 0 = 1
Prelude> fact 1
*** Exception: <interactive>:2:1-10: Non-exhaustive patterns in function fact
Run Code Online (Sandbox Code Playgroud)

这是从哪里来的,如何在将来避免这个错误?

haskell pattern-matching ghci

1
推荐指数
1
解决办法
264
查看次数

重新定义haskell中的函数

这是对的还是错的?

我读了这篇文章.

这是您将在整个Haskell中看到的常见模式的一个非常简单的示例.制作明显正确的基本功能,然后将它们组合成更复杂的功能.这样你也可以避免重复.如果一些数学家发现2实际上是3并且你不得不改变你的程序怎么办?您可以重新定义doubleMex + x + x自从doubleUs呼叫以来doubleMe,它将自动在这个奇怪的新世界中工作,其中2是3.

当我调用doubleUs 3 4它应该返回21因为我重新定义了doubleMe函数,但函数返回14.

haskell

1
推荐指数
1
解决办法
303
查看次数

插入功能中缺少模式

我有这个功能inserts,其中

inserts 1 [2,3] = [[1,2,3],[2,1,3],[2,3,1]]
Run Code Online (Sandbox Code Playgroud)

这是定义(直接来自Bird和Gibbons的Haskell算法设计)

inserts :: a -> [a] -> [[a]]
inserts x [] = [[x]]
inserts x (y:ys) = (x:y:ys) : map (y:) (inserts x ys)
Run Code Online (Sandbox Code Playgroud)

我已经用上面的例子在 ghci 中尝试过,但我得到以下异常

[[1,2,3],[2,1,3]*** Exception: <interactive>:2:1-53: Non-exhaustive patterns in function inserts
Run Code Online (Sandbox Code Playgroud)

有谁知道缺少的模式是什么?

haskell ghci non-exhaustive-patterns multiline-repl-definition

1
推荐指数
1
解决办法
59
查看次数