小编chr*_*ris的帖子

用前缀表示法重写monad计算

我试图弄清楚如何使用前缀表示法重写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参数的这个属性是中缀表示法独有的?

haskell infix-notation

3
推荐指数
1
解决办法
194
查看次数

Isabelle:如何打印1 + 2的结果?

这是一个初学者的问题.

我正在阅读教程"在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.

isabelle

3
推荐指数
1
解决办法
563
查看次数

来自ghci的Haskell命令行帮助

是否ghci有内置的帮助吗?换句话说,是否可以从内部获得帮助ghci

例如,我现在想要所有可以应用于列表的函数.

有一个有用的命令:info,它输出一些帮助,但它有点麻烦.

haskell helper

3
推荐指数
1
解决办法
481
查看次数

如何在Isabelle/HOL中证明/ for

我有这个C代码:

while(p->next)   p = p->next;
Run Code Online (Sandbox Code Playgroud)

我想证明无论列表有多长,当这个循环结束时,p->next等于NULL,EIP引用此循环后的下一条指令.

但我不能.有谁知道如何在Isabelle/HOL中证明循环?

c loops while-loop isabelle

3
推荐指数
1
解决办法
884
查看次数

从 SML 中的列表中获取最大值

我目前正在学习 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]如果您能向我展示这是如何工作的,那就太好了。

recursion list sml

3
推荐指数
1
解决办法
3020
查看次数

错误:';' 预计会发现'其他'

我写了以下简单的代码:

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)

虽然对我来说似乎是对的,但是有一个错误.上面的代码有什么问题?

scala

2
推荐指数
1
解决办法
2357
查看次数

如何将元组元组转换为地图

我有一个TupleTupleS和需要将其转换为一个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中执行此操作的方法有哪些?

scala

2
推荐指数
1
解决办法
3560
查看次数

带扭曲的递归函数的归纳

我试图证明这个定理,如果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)

isabelle

2
推荐指数
1
解决办法
195
查看次数

迭代地图的中间三分之一

我有一个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)

loops scala map

1
推荐指数
1
解决办法
115
查看次数

通过将列表保存在val中来删除列表sml的最后一个元素

如何删除标准ML中列表中的最后一个元素?我有一个列表定义为:

val list = [1, 4, 6, 8, 9]
Run Code Online (Sandbox Code Playgroud)

我想删除最后一个元素,并在列表中val list.

ml sml

1
推荐指数
1
解决办法
2178
查看次数

OCaml/ML中的评估员

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的新手并不习惯语法.我在哪里可以写这篇文章?

ocaml ml evaluator

1
推荐指数
1
解决办法
319
查看次数

标签 统计

isabelle ×3

scala ×3

haskell ×2

loops ×2

ml ×2

sml ×2

c ×1

evaluator ×1

helper ×1

infix-notation ×1

list ×1

map ×1

ocaml ×1

recursion ×1

while-loop ×1