我试图弄清楚如何使用前缀表示法重写monadic计算(不是为了实际目标,仅用于研究),而是一个lambda看不到另一个参数的问题
给一个工作的例子
*Main> [1, 3, 4] >>= \x -> [x + 1, x - 1] >>= \y -> return (y*x)
[2,0,12,6,20,12]
Run Code Online (Sandbox Code Playgroud)
重写的那个显示错误没有看到其他lambda的参数
*Main> (>>=) ( (>>=) [1, 3, 4] (\x -> [x + 1, x - 1]) ) (\y -> return (y*x))
<interactive>:133:68: Not in scope: `x'
Run Code Online (Sandbox Code Playgroud)
但如果我让最后一个不使用它(通过用y代替x),计算就开始工作了
*Main> (>>=) ( (>>=) [1, 3, 4] (\x -> [x + 1, x - 1]) ) (\y -> return (y*y))
[4,0,16,4,25,9]
Run Code Online (Sandbox Code Playgroud)
那么技术上可能在前缀表示法中完全重写吗?或者访问其他lambdas参数的这个属性是中缀表示法独有的?
这是一个初学者的问题.
我正在阅读教程"在Isabelle/HOL中编程和证明".
我想打印"1 + 2"的结果.
所以我写道:
value "1 + 2"
Run Code Online (Sandbox Code Playgroud)
这使:
"1 + (1 + 1)"
:: "'a"
Run Code Online (Sandbox Code Playgroud)
我想看看结果,即"3".我怎么能在伊莎贝尔那里做到这一点?如果我在定理证明器中标准化"1 + 2",则显示结果3.我只想在伊莎贝尔做同样的事情.
请注意,我昨天开始使用Isabelle.
是否ghci有内置的帮助吗?换句话说,是否可以从内部获得帮助ghci?
例如,我现在想要所有可以应用于列表的函数.
有一个有用的命令:info,它输出一些帮助,但它有点麻烦.
我有这个C代码:
while(p->next) p = p->next;
Run Code Online (Sandbox Code Playgroud)
我想证明无论列表有多长,当这个循环结束时,p->next等于NULL,EIP引用此循环后的下一条指令.
但我不能.有谁知道如何在Isabelle/HOL中证明循环?
我目前正在学习 SML,我很难理解下面的代码
fun good_max (xs : int list) =
if null xs
then 0
else if null (tl xs)
then hd xs
else
(* for style, could also use a let-binding for (hd xs) *)
let val tl_ans = good_max(tl xs)
in
if hd xs > tl_ans
then hd xs
else tl_ans
end
Run Code Online (Sandbox Code Playgroud)
hd xs是类型,int并且tl_ans,我认为是类型list。为什么这段代码有效?系统如何评估递归?xs = [3, 4, 5]如果您能向我展示这是如何工作的,那就太好了。
我写了以下简单的代码:
def Commas(n: Long) = {
if (n >= 1000)
Commas(n/1000)
print(","+ n%1000/100 + n%100/10 + n%10)
else
print(n%1000/100 + n%100/10 + n%10)
}
Run Code Online (Sandbox Code Playgroud)
虽然对我来说似乎是对的,但是有一个错误.上面的代码有什么问题?
我有一个Tuple的TupleS和需要将其转换为一个Map.例如
(("a", 3), ("b", 1), ("c", 7), ..., ("z", 10))
Run Code Online (Sandbox Code Playgroud)
应该导致 Map
Map("a" -> 3, "b" -> 1, ..., "z" -> 10)
Run Code Online (Sandbox Code Playgroud)
在Scala中执行此操作的方法有哪些?
我试图证明这个定理,如果n > 0那么g n b = True(见下文).情况就是这样,因为g (Suc n) b只有电话g 0 True.不幸的是,当我尝试证明时,我的归纳中没有这个事实g 0 b.我怎样才能完成证明(我有什么要更换的sorry?)?
fun g :: "nat ? bool ? bool" where
"g (Suc n) b = g n True" |
"g 0 b = b"
theorem
fixes n::nat and b::bool
assumes "n > 0"
shows "g n b"
proof (induct n b rule: g.induct)
fix n
fix b
assume "g n True"
thus "g (Suc n) …Run Code Online (Sandbox Code Playgroud) 我有一个scala Map[String, String],我只是将一部分键与其值相比较,仅用于地图的三分之一.由于在地图中使用索引进行迭代并不容易,因此我想出了以下内容,但它不起作用.
var i = 0
var j = 0
val mapSize = sortedMap.size/3
for((key,value) <- sortedMap) {
j+=1
if((i < 3) && (key.split(' ').take(1).mkString==value)&&(j>mapSize)){
Accuracy += 1
i += 1
}
}
Run Code Online (Sandbox Code Playgroud) 如何删除标准ML中列表中的最后一个元素?我有一个列表定义为:
val list = [1, 4, 6, 8, 9]
Run Code Online (Sandbox Code Playgroud)
我想删除最后一个元素,并在列表中val list.
type bool_exp =
TT
| FF
| Var of string
| And of bool_exp * bool_exp
| Not of bool_exp ;;
eval : bool_exp -> (string -> bool) -> bool
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个名为的求值函数eval.我是OCaml的新手并不习惯语法.我在哪里可以写这篇文章?