- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Type Driven Development with Idris 一书介绍了这个练习:
Define a possible method that fits the signature:
two : (xs : Vect n elem) -> Vect (n * 2) elem
two : (xs : Vect n elem) -> Vect (n * 2) elem
two xs = xs ++ xs
*One> :r
Type checking ./One.idr
One.idr:9:5:When checking right hand side of two:
Type mismatch between
Vect (n + n) elem (Type of xs ++ xs)
and
Vect (mult n 2) elem (Expected type)
Specifically:
Type mismatch between
plus n n
and
mult n 2
Holes: Hw1.two
最佳答案
简答
将类型签名更改为 two : (xs : Vect n elem) -> Vect (n + n) elem
。
如果你真的需要那样
获取 Vect (n * 2) elem
有点复杂。这里:
two' : Vect n elem -> Vect (n * 2) elem
two' {n} xs = rewrite multCommutative n 2 in rewrite plusZeroRightNeutral n in xs ++ xs
n + n
和
mult n 2
是相等的,但它们的正常形式不是。 (
mult n 2
是
n * 2
在解析类型类后减少的内容。)
mult
的定义:
*kevinmeredith> :printdef mult
mult : Nat -> Nat -> Nat
mult 0 right = 0
mult (S left) right = plus right (mult left right)
two
的类型签名中的第一个参数是
n
,因此根本无法减少
mult
。
multCommutative
将帮助我们翻转它:
*kevinmeredith> :t multCommutative
multCommutative : (left : Nat) ->
(right : Nat) -> left * right = right * left
rewrite
,就像我对
two'
的定义一样。 (在 REPL 上运行
:t replace
,如果你想看看如何以困难的方式做到这一点)在
rewrite foo in bar
构造中,
foo
是
a = b
类型的东西,
bar
具有外部表达式的类型,但所有
a
s 都被
b
s 替换。在上面的
two'
中,我首先使用它将
Vect (n * 2)
更改为
Vect (2 * n)
。这让
mult
减少。如果我们查看上面的
mult
,并将其应用于
2
,即
S (S Z)
和
n
,你会得到
plus n (mult (S Z) n
,然后是
plus n (plus n (mult Z n))
,然后是
plus n (plus n Z)
。您不必自己计算减少量,您只需应用重写并在最后放一个洞:
two' : Vect n elem -> Vect (n * 2) elem
two' {n} xs = rewrite multCommutative n 2 in ?aaa
*kevinmeredith> :t aaa
elem : Type
n : Nat
xs : Vect n elem
_rewrite_rule : plus n (plus n 0) = mult n 2
--------------------------------------
aaa : Vect (plus n (plus n 0)) elem
plus n Z
不会减少,因为
plus
是由其第一个参数的递归定义的,就像
mult
一样。
plusZeroRightNeutral
为您提供所需的平等:
*kevinmeredith> :t plusZeroRightNeutral
plusZeroRightNeutral : (left : Nat) -> left + 0 = left
rewrite
使用了相同的技术。
:search
可以让你在图书馆中搜索给定类型的居民。您经常会发现有人已经为您完成了证明工作。
*kevinmeredith> :s (n : Nat) -> n + 0 = n
= Prelude.Nat.multOneLeftNeutral : (right : Nat) ->
fromInteger 1 * right = right
= Prelude.Nat.plusZeroRightNeutral : (left : Nat) ->
left + fromInteger 0 = left
*kevinmeredith> :s (n, m : Nat) -> n * m = m * n
= Prelude.Nat.multCommutative : (left : Nat) ->
(right : Nat) -> left * right = right * left
关于idris - (xs : Vect n elem) -> Vect (n * 2) elem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33839427/
有没有办法像这样输出一个数组: (elem,elem,elem) 例如,如果数组是[2, 3, 4],它会打印: (2,3,4) 最佳答案 puts "(#{array.join ','})" 这是一
我正在使用 g++ -g 编译我的代码,但我在标题中收到了错误消息。 这个错误与我做的一个函数有关,它的签名是: void addHead( Elem *&start , Elem *newStart
我使用的代码如 $('.elem',elem)、$('.elem',elem).tabs()。 $(".elem") 用于选择具有该类的元素。 但是逗号后面的是什么?它有什么用? 最佳答案 $('.e
你可能看过我之前关于 jQuery 升级的主题。所以最后我们将jQUery从1.4.2升级到1.6.1,但我们遇到了以下问题: elem is undefinedif ( elem.nodeName
typedef struct Element { struct Element *next; void *data; } Element; 在 pop 函数中,(!(elem = *s
我今天想知道 javascript 函数。我知道 jQuery 是一个 javascript 库,可以在带有点的元素上调用函数。 javascript 有时会做同样的事情(例如:.toFixed())
这个问题在这里已经有了答案: val() vs. text() for textarea (2 个答案) 关闭 5 年前。 这很奇怪。显然,我可以同时使用 .val() 和 .text() 来操作文
这个问题已经有答案了: Which way to test if an element is checked is better? .is(':checked') or .prop('checked'
所以,基本上我想检测用户何时将鼠标悬停在一个元素上(不同的 div 元素,不是父元素或同级元素),并且当发生悬停时,添加 :hover到我的另一个 div 元素。我的其他 div 元素状态的 :hov
Type Driven Development with Idris 一书介绍了这个练习: Define a possible method that fits the signature: two
在下面的代码中,两个选项似乎都分配了相同的资源 func Allocate(v interface{}) error { rv := reflect.ValueOf(v) if rv.
我有以下内容: elem :: Eq a => a -> [a] -> Bool elem _ [] = False elem x (y:ys) = x == y || elem x ys 我如何证明
每当我在本地系统中运行脚本时,游标都能正常工作,当我在docker中运行时,我获取了一个错误,所以任何人都会告诉我哪里出了问题,或者这个问题是不是包端的问题。。当我在当地跑的时候,我无头:假,当时无头
我有外部 RSS 提要填充以下重复出现的类 elements 。 {teaserImage} {teaserImage} {teaserImage} 我想简单地获取 :first 实例,该实例也是来自
使用 python 的 openpyxl 加载 xlsm 文件,然后在将一些数据添加到特定工作表中的特定 7 个单元格后保存/关闭它时,我收到警告。问题是我收到了一个“FutureWarning”,我
问题是将列表元素的连续副本打包到子列表中。 我不明白elem在这里使用单个元素, 例如, pack [1,1,2,2,3,4] 然后x将为 1 和 (head (pack xs))将是 1。 怎么能:
$(elem) 的用途是什么?我什么时候使用它? 我的 javascript 函数有问题,我有 3 个表单,这 3 个表单有时共享相同的字段类,因此当我尝试对其中一个表单进行验证时,即使它已正确填写,
我有一个相当简单的问题,我通常可以自己调试,但我现在似乎遇到了很多问题。 我正在创建一个链表数据结构,我做了两个函数,一个返回前面的 Elem,一个返回最后一个 Elem。问题是编译器说 Elem 没
我开始使用 ES6 粗箭头函数符号,我非常喜欢它。但是我对它的上下文有点困惑。据我所知,关键字 this inside fat arrow function 指的是函数当前运行的上下文。我想做一些简单
Go语言程序中对指针获取反射对象时,可以通过 reflect.Elem() 方法获取这个指针指向的元素类型。这个获取过程被称为取元素,等效于对指针类型变量做了一个 *操作,代码如下: packag
我是一名优秀的程序员,十分优秀!