让我们说
flip :: (a->b->c) ->b->a->c
const ::d->e->d
Run Code Online (Sandbox Code Playgroud)
(翻转const)的类型
a=d,b=e,c=d
Run Code Online (Sandbox Code Playgroud)
在
b->a->c
Run Code Online (Sandbox Code Playgroud)
所以类型会是
e->d->d
Run Code Online (Sandbox Code Playgroud)
但是(地图拍摄)它
[Int]->[[a]]->[[a]]
Run Code Online (Sandbox Code Playgroud)
所以我不明白这个ghci是如何计算的.我理解[[a]] - > [[a]]但是为什么以及如何[Int]?
编辑:例如,如果我们写ghci
:t flip const
it would return b->c->c
Run Code Online (Sandbox Code Playgroud)
和ghci会像我一样计算出来.
但
map :: (a->b)->[a]->[b]
take :: Int->[c]->[c]
Run Code Online (Sandbox Code Playgroud)
那么为什么地图需要
[Int]->[[a]->[a]]
Run Code Online (Sandbox Code Playgroud)
为什么[Int] ghci是如何计算出来的
假设我有一个JFrame类的对象作为框架
我想知道它们之间有什么区别
JOptionPane.showMessageDialog(null,message)
Run Code Online (Sandbox Code Playgroud)
和
JOptionPane.showMessageDialog(frame,message)
Run Code Online (Sandbox Code Playgroud)
打印出来的东西.给出相同的结果,它们会弹出同一个地方.所以我想知道这两者之间究竟有什么区别?背景中实际发生的事情有何不同
我正在学习Haskell中的数据结构.我看到类似的东西:
Tree(Int,Int)
Run Code Online (Sandbox Code Playgroud)
这是否意味着树木的元组?我正在尝试写一些类似的东西:
data Tree a = Leaf a | Node (Tree a) a (Tree a) deriving (Eq,Show)
weight :: (Tree Integer) -> Tree(Integer,Integer)
weight (Node left leaf right) = Node (leaf, (sum left) + (sum right))
where
sum (Leaf a) = 0
sum (Node left leaf right) = leaf + sum left + sum right
Run Code Online (Sandbox Code Playgroud)
但我得到无法匹配的错误.
我想得到的是每个Node的权重并将其作为元组返回,并且单个叶子没有权重.
我认为Haskell中的元组就像
tuple :: (a,b)
Run Code Online (Sandbox Code Playgroud)
这意味着a和b可以是相同类型,也可以是不同类型
因此,如果我定义一个函数而不给它类型,那么当我写ghci中的t函数时,我可能得到(t,t1)或一些不同的类型.因此,如果不在功能中定义它,可能只获得相同的类型.我听说haskell不允许这样做
所以我不能写一些像
function [(x,x)]=[(x,x,x)]
Run Code Online (Sandbox Code Playgroud)
得到的
:t function
function :: [(a,a)]->[(a,a,a)]
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试做的练习,这个练习要我编写一个函数而不定义一个类型.例如得到
Bool->(Char,Bool)
Run Code Online (Sandbox Code Playgroud)
当我给
:t function
Run Code Online (Sandbox Code Playgroud)
在ghci.我应该写 -
function True=('A',True)
Run Code Online (Sandbox Code Playgroud)
我不被允许定义函数的类型部分所以我不能写
function::(Eq a)=>[(a,a)]->[(a,a,a)]
Run Code Online (Sandbox Code Playgroud)
或类似的东西
我正在检查一些代码,然后我试着写其中一个,但我一直得到一个解析'='错误但是当我复制从源代码粘贴代码它工作正常,这有什么区别;
quicksort2 :: (Ord a) => [a] -> [a]
quicksort2 [] = []
quicksort2 (x:xs) =
let smallerSorted = quicksort2 [a | a <- xs, a <= x]
biggerSorted = quicksort2 [a | a <- xs, a > x]
in smallerSorted ++ [x] ++ biggerSorted
Run Code Online (Sandbox Code Playgroud)
还有这个 ;
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
let smallerSorted = quicksort [a | a <- xs, a <= x]
biggerSorted = quicksort [a | a …Run Code Online (Sandbox Code Playgroud) 例如;
data TRAINING=AGAIN Int [TRAINING]
|RUN
|JUMP
|PUNCH Int
deriving (Eq,Show,Read)
Run Code Online (Sandbox Code Playgroud)
是定义的,我希望如果用户输入如下内容:
"RUN, PUNCH 15, AGAIN 3 [JUMP, AGAIN 2 [PUNCH 20]]"
Run Code Online (Sandbox Code Playgroud)
然后程序应该返回
[RUN,PUNCH 15,AGAIN 3 [JUMP,AGAIN 2 [PUNCH 20]]]
Run Code Online (Sandbox Code Playgroud)
所以我写了
fight :: String->[TRAINING]
fight xs=[read xs ::TRAINING]
Run Code Online (Sandbox Code Playgroud)
但我得到"没有解析异常".我是新手,我想知道"没有解析异常"是什么以及如何解决它?