如果蜥蜴的尾巴被切断,再说两个再生长.如果我有下面的数据类型,我将如何编写一个函数来复制多少尾巴?
data Lizard = Tail
deriving (Eq, Show)
duplicate :: Lizard -> Lizard
duplicate Tail?? = ???
Run Code Online (Sandbox Code Playgroud)
所以输入
> duplicate Tail
Run Code Online (Sandbox Code Playgroud)
应该给
> Tail Tail
Run Code Online (Sandbox Code Playgroud) 我正在做一些字符串工作,给我一些重复的单引号字符串,如:
all''your''base''belong
Run Code Online (Sandbox Code Playgroud)
我想在撇号之间分隔字符串以获取列表:
all'
'your'
'base'
'belong
Run Code Online (Sandbox Code Playgroud)
或者,更好的是,它会修剪撇号的每个单词,除非它只在末尾有一个撇号,所以最终的结果是:
all'
your
base
belong
Run Code Online (Sandbox Code Playgroud)
我怎么能干净利落地去做呢?
所以我正在定义一个基本列表的类型,我无法弄清楚如何使其变为多态.到目前为止我已经有了
module ListTup where
type ListTup = [(Char, String)]
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能使Char部分可以成为任何ei String,无论如何.可能吗?我尝试使用Maybe Type但是我的方式却犯了很多错误
我无法为newtype派生Eq和Show.
newtype Comp a = Comp {unComp :: a -> a } deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)
当我尝试将此文件加载到我的堆栈ghci中时,它告诉我"没有实例(Show(a - > a))"
但完全相同的定义在另一个文件中加载正常.实际上以前的文件也存在问题但是它因为一些奇怪的原因而停止了.
我有一个[[a]]类型,例如它看起来像:
[[1,2,3],[1,2],[1],[]]
Run Code Online (Sandbox Code Playgroud)
但我想在Haskell中创建一个函数,它将使它看起来像:
[[],[1],[1,2],[1,2,3]]
Run Code Online (Sandbox Code Playgroud)
我开始使用此函数,但它不适用于包含列表的列表:
myreverse ::[Integer] -> [Integer]
myreverse [] = []
myreverse (h:t)= myappend (myreverse t) [h]
Run Code Online (Sandbox Code Playgroud)
(myappend是我的本地函数,它附加了列表)
那么我需要在代码中进行哪些更改才能使其与包含其他列表的列表一起使用?
我一直认为已经证明,pred对于任何数据类型的编码,在构造微积分的不变时间内都无法表达.现在,请注意nats的这种编码:
S0 : ? (r : *) . (r -> r) -> r -> r
S0 = ? s z . z
S1 : ? (r : *) (((? (r : *) . (r -> r) -> r -> r) -> a) -> (a -> a)))
S1 = ? s z . (s (? s z . z))
S2 : (? (r : *) . ((? (r : *) . ((? (r : *) . (r -> r) …Run Code Online (Sandbox Code Playgroud) 如何使用Haskell获得教堂数字中的取幂函数?
我正在尝试应用规则,即λxy.yx,但有些东西不能正常工作.
exponentiation :: (Num a) => Func a
exponentiation x y = y x
Run Code Online (Sandbox Code Playgroud) 我如何手动确定表达式的类型,而不是:type在GHCi 中使用?
对于基本表达式,我们可以通过查看表达式并提出某种类型来实现.
对于更复杂的表达式,是否存在某种算法方法(.) . (.)?
在学习箭头的过程中,我偶然发现了一个随着时间的推移并没有变得更清晰的点:
从 John Hughes 的论文“Generalizing Monads To Arrows”中,我注意到下面的情况(情况 I)是不可能的,因为参数中的箭头 f不能在箭头过程的本地范围内使用。
-- case I
proc (f,x) -> returnA <- f -< x --- here the f is illegal
Run Code Online (Sandbox Code Playgroud)
如果我们otherArrow在其他地方定义了另一个箭头 ,我们可以这样做:
-- case II
proc (f,x) -> returnA <- otherArrow -< x
Run Code Online (Sandbox Code Playgroud)
我理解需要类似-<没有应用箭头才能应用于x其输入。所以我们用-<它来实现这一点(案例二)。
但我不明白无法使用块参数中给出的箭头的原因proc。(f在proc (f,x)案例 I 中)。
而我的不理解又和一个经常使用的术语发生了冲突:箭头命令。Papers 坚持认为它并不等同于 Haskell 表达式,并且 Haskell 类型系统不适合使箭头命令成为语言中的一流命令。
我再次不明白是什么事实/属性使它不可能在 Haskell 类型系统中成为一流的。理解这种不可能背后的原因似乎是我需要的洞察力。
鉴于罗斯帕特森论文中的语法:
exp ::= ...
| proc pat -> …Run Code Online (Sandbox Code Playgroud) 哈斯克尔。匹配模式问题。无法输入空列表函数的 IO 值
print $ note1 []
Run Code Online (Sandbox Code Playgroud)
无法编译,但在 ghci 中工作正常?!另外,print $ note1 [1]工作正常,编译罚款了。只有空列表的问题:
print $ note1 []
Run Code Online (Sandbox Code Playgroud)
(注意我是 Haskell 的新手)我有一个匹配的模式函数
note1 :: (Show a) => [a] -> String
note1 [] = "Empty"
note1 (x:[]) = "One"
Run Code Online (Sandbox Code Playgroud)
但print $ note1 []无法编译,但在 ghci 解释器中完美运行?!
我在 MacOS 上使用 stack 2.3.1 和 ghc 8.8.3。
这是编译器产生的编译错误。
/Users/admin1/Haskell/PROJECTS/orig1/src/Lib.hs:18:13: error:
• Ambiguous type variable ‘a0’ arising from a use of ‘note1’
prevents the constraint ‘(Show a0)’ from being solved.
Probable fix: use a …Run Code Online (Sandbox Code Playgroud)