Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 不能';t将预期类型(Int->;Int->;Int)与实际类型`(t0、t1、t2)和#x27;_Haskell_Types_Tuples - Fatal编程技术网

Haskell 不能';t将预期类型(Int->;Int->;Int)与实际类型`(t0、t1、t2)和#x27;

Haskell 不能';t将预期类型(Int->;Int->;Int)与实际类型`(t0、t1、t2)和#x27;,haskell,types,tuples,Haskell,Types,Tuples,我是一名初学者,在进入大学学习计算机科学之前,我正在尝试做一些关于哈斯克尔的教程 我被困在这个节目里了。它需要三个数字并按升序排列。谁能帮帮我,告诉我出了什么问题,因为这让我发疯了?谢谢你抽出时间 import Prelude hiding (min,max) orderTriple :: (Int -> Int -> Int) -> (Int -> Int -> Int) max :: Int -> Int -> Int -> Int min :

我是一名初学者,在进入大学学习计算机科学之前,我正在尝试做一些关于哈斯克尔的教程

我被困在这个节目里了。它需要三个数字并按升序排列。谁能帮帮我,告诉我出了什么问题,因为这让我发疯了?谢谢你抽出时间

import Prelude hiding (min,max)
orderTriple :: (Int -> Int -> Int) -> (Int -> Int -> Int)
max :: Int -> Int -> Int -> Int
min :: Int -> Int -> Int -> Int
middle :: Int -> Int -> Int -> Int


max x y z
 |(x>=y) && (x>=z)  = x
 |(y>=x) && (y>=z)  = y
 |otherwise     = z

min d e f
 |(d<=e) && (d<=f)  = d
 |(e<=d) && (e<=f)  = e
 |otherwise     = f

middle g h i
 | (g <= (max g h i)) && (g >= (min g h i)) = g
 | (h <= (max g h i)) && (h >= (min g h i)) = h
 | otherwise                    = i

orderTriple (a,b,c) = ((min a b c),(middle a b c),(max a b c))

您为编译器提供了错误的类型信息:

orderTriple :: (Int -> Int -> Int) -> (Int -> Int -> Int)
应该是

orderTriple :: (Int, Int, Int) -> (Int, Int, Int)
第一种类型声称,
orderTriple
将一个函数(从两个int转换为一个int)转换为另一个这样的函数,这与代码所做的完全不同


(同时:+1用于研究FP以准备CS程序)。

箭头
->
分隔函数的参数。(实际上它有点复杂)但要分离元组的参数,请使用逗号:

orderTriple :: (Int,Int,Int) -> (Int,Int,Int)
对于其他类型,空间足够:

Either String Int

thx非常了解您的帮助,但这次它出现了另一个错误:1:1:函数
orderTriple'应用于三个参数,但其类型为
(Int,Int,Int)->(Int,Int,Int)'在表达式中只有一个:orderTriple 3 1 9在'it'的方程式中:it=orderTriple 3 1 9
orderTriple
的定义需要一个元组,即括号中以逗号分隔的参数。您必须这样称呼它--
orderTriples(3,1,9)
--不能使用三个不带括号的空格分隔(curried)参数。@noobie:您可能还需要检查在
orderTriple
的定义中使用的是圆括号
()
而不是方括号
[]
。您给出的错误消息与上面的代码列表不同…是的,您又对了!我调用了没有括号的函数:orderTriple 3 1 9,这就是它出现此错误的原因!我感谢你的帮助:)祝你有一个愉快的一天你真的打算在大学里做哈斯克尔(或某种形式的FP)吗?我希望我能在我的节目中看到这一点!
Either String Int