我试图了解此数据类型(方)如何表示平方矩阵。
type Square = Square' Nil
data Square' t a = Zero (t (t a) ) | Succ (Square' (Cons t) a)
data Nil a = Nil
data Cons t a = Cons a (t a)
Run Code Online (Sandbox Code Playgroud)
所以。这是t什么 我想这是上面声明的类型之一。我决定从最简单的开始
Zero (Nil (Nil Int))
Run Code Online (Sandbox Code Playgroud)
如果我将整数4作为值,这是矩阵(4)吗?
假设它是某种东西。现在,这是什么:
Succ ( Zero (Cons t) a)
Run Code Online (Sandbox Code Playgroud)
如果我是正确的t,那么这也许必须代表一些2×2矩阵,但是它的值是多少?
Succ (Zero (Cons Nil) a)
Run Code Online (Sandbox Code Playgroud)
感谢您在我对它是方矩阵的理解方面的帮助。
Note: this is an exercise, and I'm trying to understand how things work.
I am trying to make it possible to do something like this in Haskell:
f :: Integer -> Integer
f n = def $ do
i <- var n
while i (>0) $ do
i -= lit 1
return i
-- for now, my program returns n
Run Code Online (Sandbox Code Playgroud)
Below is my program. At this point, I cannot understand why it doesn't work, but for some reason, the variables …
是否可以写一份合同来检查陈述是否正确?例如,我想定义一个合同
true :: Contract a
Run Code Online (Sandbox Code Playgroud)
这样对于所有值x,方程
assert true x == x
Run Code Online (Sandbox Code Playgroud)
持有。
我已经尝试过这样的事情:
true :: Contract a
true = Pred (\a -> True)
Run Code Online (Sandbox Code Playgroud)
但是在运行assert true x == x编译器时,这x是未定义的。运行时 assert true 5==6的结果是 False,我希望有一个 Contract violation error。我应该如何更改这份 true合同?感谢您的帮助。
这里
data Contract :: * -> * where
Pred :: (a -> Bool) -> Contract a
Fun :: Contract a -> Contract b -> Contract (a -> b)
Run Code Online (Sandbox Code Playgroud)
如果违反合同,则声明将导致运行时失败,否则将返回原始结果:
assert :: Contract a -> a -> …Run Code Online (Sandbox Code Playgroud) 我的程序是这样的:
func = do
text <- getLine
return text
Run Code Online (Sandbox Code Playgroud)
如果我读 line \123\456,结果自然是\\123\\456. 我怎样才能得到 \123\456结果?