我对Haskell世界真的很陌生,所以请原谅我这个愚蠢的问题。我安装了Haskell平台,执行了cabal install repa,然后尝试在WinGHCi中加载包含此代码的文件
import qualified Data.Array.Repa as R
:m + Data.Array.Repa
但我得到的是:
Could not find module `Data.Array.Repa'
Perhaps you meant
Data.Array.Base (from array-0.4.0.0)
Data.Array.IO (from array-0.4.0.0)
Da
我加载了两个模块(中的外链模块NecessaryModule1.hs和NecessaryModule2.hs )。现在我想卸载NecessaryModule2.hs。然而,我在中发现了一个“unload”函数,但它在WinGHCi中不起作用。我得到的错误消息是:
>unload NecessaryModule2
<interactive>:1:1: Not in scope: `unload'
<interactive>:1:8:
Not in scope: data constructor `NecessaryModule2'
我试过
使用WinGHCi,如何实现以下代码?
soma :: Int -> Int
soma 1 = aluno 1
soma n = aluno n + soma (n-1)
我目前正在使用以下工具编写多行代码
:{
...
:}
但在这种情况下,这似乎并没有解决问题。另外,为什么像这样的东西
soma x y = x + y
工作,当我在WinGHCi中工作的时候?只有在使用let关键字的情况下才能执行此操作
let soma x y = x + y -- valid Haskell code
尽管在大多数文献中,人们似乎并不使用它(我假设这是因为他们正在编译代码?)。
谢谢
例如:
{-# LANGUAGE UnicodeSyntax #-}
data Symbolic n
= Constant n
| Variable String
| Symbolic n :+ Symbolic n
| Symbolic n :* Symbolic n
| Symbolic n :◁ Symbolic n
deriving (Show)
此代码已成功加载到GHCi中。
然后我输入:
Constant 2 :* Variable "a"
没关系。
但是当我输入的时候:
Constant 2 :◁ Variable "a"
以此为例:
(**) Determine the greatest common divisor of two positive integer numbers. Use Euclid's algorithm.
gcd' 0 y = y
gcd' x y = gcd' (y `mod` x) x
myGCD x y | x < 0 = myGCD (-x) y
| y < 0 = myGCD x (-y)
| y < x = gcd' y x
| ot
这不是我的代码:
import Data.Monoid (Endo (..), appEndo)
import Data.Foldable (foldMap)
-- | chainEndos chain a list of endomorphisms to create a new one
-- Point-free version is feasible and redable.
-- Level: Easy
--
-- Examples:
--
-- >>> chainEndos [(+1),(*3)] 2
-- 7
-- >>> chainEndos
我只是想看看WinGHCi是否适用于Haskell编程,但我不知道为什么会显示上面的错误。 我不知道这是否是在Haskell上工作的正确应用程序,如果您知道另一个可以实际工作的应用程序,我将不胜感激。 f (x:xs) = f ys ++ [x] ++ f zs
where
ys = [a | a ← xs, a ≤ x]
zs = [b | b ← xs, b > x] <interactive>:21:20: error:
parse error on input ‘=’
Perhaps you need a 'let' in a
我使用WinGHCi,我的代码(非常简单)如下:
module Main
where
import IO
main = do
hSetBuffering stdin LineBuffering
putStrLn "Enter your name: "
name <- getLine
putStrLn("Hello, " ++ name ++ ", how are you?");
错误消息:
2.hs:4:8:
Could not find module `IO'
It is a memb
考虑一下这个组合器:
S (S K)
将其应用于参数X Y:
S (S K) X Y
它与以下公司签约:
X Y
我将S (S,K)转换为相应的Lambda项,并得到以下结果:
(\x y -> x y)
我使用Haskell WinGHCi工具获取(\x y -> x y)的类型签名,它返回:
(t1 -> t) -> t1 -> t
这对我来说是有意义的。
接下来,我使用WinGHCi获取s (s,k)的类型签名,并返回:
((t -> t1) -> t) -> (t -> t1) -> t
对我毫无意思。为什么类型签名不同?
注
我正在看“Haskell基本面1”在Pluralsight中。在第二章中,作者给出了一个非常简单的函数,如果在中使用。当我尝试它时,每当我尝试负数函数时,我都会出错。这是函数
posOrNeg x =
if x >= 0
then "Positive"
else "Negative"
当我尝试使用正数的方法时,它工作得很好,但是当我用负数调用该方法时,winGHCi会抛出以下错误。
“(显示(a0 -> Char))没有因使用‘打印’而产生的实例.”
更重要的是这里的功能吗?
我现在了解了s (s k)的类型签名
s (s k) :: ((t1 -> t2) -> t1) -> (t1 -> t2) -> t1
我可以在Haskell WinGHCi工具中创建没有错误的示例:
示例:
s (s k) (\g -> 2) (\x -> 3)
返回2。
示例:
s (s k) (\g -> g 3) successor
返回4。
其中successor的定义如下:
successor = (\x -> x + 1)
尽管如此,我仍然对s (s k)的工作没有直观的感觉。
组合器s (s k)接受任意两个函数f和g。
这是文件Solitaire.hs的源代码:
import MergeSort
module Solitaire where
a :: Int
a = 2
MergeSort.hs和Solitaire.hs位于同一个目录中。
我在用WinGhci。
在切换到Solitaire.hs目录并使用命令:load Solitaire.hs之后,尝试加载Solitaire.hs时所遇到的错误是:
Solitaire.hs:3:1: error: parse error on input ‘module’
|
3 | module Solitaire where | ^^^^^^
Fa
我是Haskell的新手,我想要一些关于创建函数的提示。我习惯用C#、Java和C++写东西,所以这些东西对我来说真的很陌生。
以下是我正在研究的问题:
在Haskell中声明类型并编写一个函数,该函数以三个数字作为输入,并返回较大的一个。编写这个函数的两个版本:第一种使用如果其他的话,第二种使用保护。
在第一个工作中,我想出了这样的东西.
largestInt :: Int -> Int -> Int --Declaring type
largestInt a b c = if (a > b && a > c) then a --I don
我读过的答案,但我仍然很困惑。在运行在Windows10中的GHCi (Version8.2.1)和WinGHCi (Version1.0.6)中,在使用和不使用let时,我似乎都能够在提示符下将值绑定到表达式(见下文)。类似地,我似乎能够通过_let f x= x_x*和_f x= x_x*定义执行相同性能的函数。
Prelude> x = 3
Prelude> let y = 3
Prelude> x
3
Prelude> y
3
Prelude> x == y
True
Prelude>
那么,在GHCi中什么时候才真正需要let呢?
如果是相关的话,
我试图在Haskell中定义一个名为"Poly“的新类型,其中类型是一个表示多项式表达式的"Num"s的列表。1,2,3对应于3x^2 + 2x + 1,因此4,5,6,0,0.0是与4,5,6,6的多项式相同。
我创建了一个名为"chop“的帮助函数来从列表的末尾删除0,但是比较两个列表时遇到了困难。你知道为什么我用的“实例”在这里不起作用吗?
它编译,但当您试图比较两个实例的保利,WinGHCi挂起。
newtype Poly a = P [a]
x :: Num a => Poly a
chop :: (Eq a, Num a) => Pol
我一直在研究其他类似的问题,但我仍然不能解决这里的问题。首先,我会说是的,这是家庭作业,但我现在不知道我错在哪里。任务是重写一个递归算法,如果n为0,则返回1,如果n小于5,则返回n,否则将在这里执行最后一行代码:
alg n = if (n == 0)
then 1
else if (n<5)
then n
else alg(n-1) * alg(n-2) * alg(n-3) * alg(n-4)
我得到的错误是WinGHCi中的一个解析错误(可能是不正确的缩进或不匹配的括号)。我在Haskell中检查了很多关于如何正确构造if语句
我正在尝试使用Gloss库的play函数,该函数接受一个事件处理函数,该函数的第一个参数是类型(根据)。我在Windows上使用GHC 7.6.3和Gloss 1.8.0.1。
这是我正在尝试做的事情的草图:
import Graphics.Gloss
type GameState = [Int]
handleInputEvent :: Event -> GameState -> GameState
handleInputEvent _ = id -- Just stubbed in for now
编译器错误是:
Not in scope: type constructor