我试图用haskell编写我的第一个IO程序,但我似乎无法从命令行运行它--我希望命令库run 5> result.txt在result.txt中以二进制形式打印5。我找到了一些转换代码,但是当我实现它时,我会得到一个错误:
src/Main.lhs:23:28: error:
• Couldn't match type ‘Int’ with ‘Char’
Expected type: String
Actual type: [Int]
• In the second argument of ‘writeFile’, namely ‘(
我用haskell做了一个计算器,我在GHCi中运行它。但是,由于最后的数字可以是整数或双精度型,因此我进行了类型声明
calc :: String -> Either Integer Double
但是,函数的输出总是在其前面显示左侧或右侧,例如
Left 7
Right 8.4
有没有办法可以停止打印左边和右边的图片?
我正在学习Haskell,我正在尝试编写一些代码,这些代码只需读取一个文件并使用lines函数创建一个行列表。例如,我有一个名为data.txt的文件,其中包含以下行:
this is line one
another line
and the final line
下面是我尝试用来将这些数据读入列表并打印到屏幕上的代码:
import System.IO
import Control.Monad
main = do
let list = []
handle <- openFile "data.txt" ReadMode
在阅读时,我想到了这样一个注释:
ghci> :info (+)
class (Eq a, Show a) => Num a where
(+) :: a -> a -> a
...
-- Defined in GHC.Num
infixl 6 +
但是,Haskell如何将+定义为非本机函数呢?在某种程度上,你不得不说2 + 3将成为汇编程序,即机器代码。
为什么Haskell基包只将IsString类定义为具有从String到'like-string‘值的转换,而没有定义从'like-string’值到String的反向转换
这个类应该被定义为:
class IsString a where
fromString :: String -> a
toString :: a -> String
参考:
在Haskell,我写道:
lt :: (Ord a) => a -> a -> Bool
lt x y
| x < y = True
| otherwise = False
我在Scala中尝试了以下操作,但没有成功:
scala> def lt[A <: Ordered[A]](a: A, b: A): Boolean = a < b
lt: [A <: Ordered[A]](a: A, b: A)Boolean
以下是REPL错误:
scala> lt(10, 100)
<console>:9: error: in
在Haskell中,以下内容将打印"hello":putStrLn (['h', 'e', 'l', 'l', 'o']),这将导致Idris中的编译错误:
48 | main = do
| ~~ ...
When checking right hand side of main with expected type
IO ()
When checking an application of function Prelude.Interactive.putStr
如何以下面的格式以python 3.x格式打印下面一行。
print ("How old are you?"),
age = input ()
print ("How tall are you ?"),
height = input ()
print ("How much do you weigh?"),
weight = input()
print("so , you're % year old, % ft tall and % kg heavy.")% (age,height,weight)
错误:-
How old
我是Haskell的初学者,我想知道是否可以打印给定列表的单个元素。我试着解决这个问题,但是失败了。代码如下: main :: IO()
main = do
let list = [1,2,3]
let size = length list
let temp = print_elem list size
print temp
print_elem :: [Int] -> Int -> Int
print_elem xs x = do
let size = length xs
let idx = size - x
let
信息:
从文档和教程中可以看出:默认情况下,"Haskell是懒惰的“。
他们不解释细节,我很好奇。
现在我知道如果我写:
filter odd [1, 2, 3]
在结果显示或在表达式中使用之前,它不会过滤结果。
我对此有几个问题:
head函数是懒惰的吗?
若否,为何不懒惰呢?
如果它很懒,Haskell编译器如何知道何时执行该函数?
我举一个例子:
f a b = head a + head b
f [2, 3] [4, 5]
在这种情况下,从我的角度来看,head将而不是返回2+ 4。
它将返回一些类型或函数,稍后将在需要时执行这些类型或函数。(如果我弄错了,请纠正我)。
我在Sub中创建了一个矩阵。我想知道,有没有什么快速的方法可以在消息框中绘制这个矩阵的值? 代码如下: Dim A() As Variant
ReDim A(5, 5)
For i = 1 To 5
For j = 1 To 5
A(i, j) = 1
Next j
Next i 尝试绘制: MsgBox A 我如何才能轻松快速地实现这一点呢?提前谢谢你。
在Haskell中,如何有效地将无限列表的最后一项与有限列表连接起来?
last不工作,它显然是从头部迭代的,因此以下内容永远不会完成:
-- let's have a list of all natural numbers,
-- with zero appended
arr = [1..] ++ [0]
-- it was fast! now get the last item, should be easy
res = last arr
编辑:我想知道Haskell对[1..] ++ [0]的内部表示是什么,最初是“完全未评估”吗?如果它将内部表示为由两个(未评估的)列表组成的“