标签: let

在Ocaml中"类型...和"和"让...和"之间的范围界定

我想知道为什么在Ocaml中,"让......和......"没有"类型......和......"那样的范围:

下面的一个是好的,t2在与t1相同的范围内

# type t1 = t2 
and t2 = int;;
Run Code Online (Sandbox Code Playgroud)

以下是WRONG,v2 in not in the scoping

# let v1 = v2
and v2 = 3;;

  Characters 9-11:
  let v1 = v2
           ^^

Error: Unbound value v2
Run Code Online (Sandbox Code Playgroud)

甚至"让rec"也行不通......

# let rec v1 = v2
and v2 = 3;;

  Characters 13-15:
  let rec v1 = v2
               ^^
Error: This kind of expression is not allowed as right-hand side of `let rec'
Run Code Online (Sandbox Code Playgroud)

为什么"类型......和"与"让...和"之间的范围不一致?谢谢.

ocaml types let scoping

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

OCaml中嵌套`let .. in ..`的评估范围/顺序

我在这里遇到一些问题,我不是百分之百理解:

let x = 1 in let x = x+2 in let x = x+3 in x

我知道这个表达式的结果是6,但只是想确定计算这个表达式的顺序; 首先计算哪部分?

evaluation ocaml functional-programming let

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

避免在没有类型注释的情况下进行绑定的单态

我有一些代码使用类型消除实例的歧义(真正的代码使用GHC.TypeLits单例作为类型标签,但我不认为这是密切相关的)我想使用let绑定来避免文本级重复; 不幸的是,这使结果单形化.

以下是该问题的一个示例:

class Foo a where
  foo :: a

instance Foo Int where
  foo = 0

instance Foo Char where
  foo = 'a'

data Bar a = Bar String
  deriving (Show)

bar :: forall a. (Show a, Foo a) => a -> Bar a
bar _ = Bar $ show (foo :: a)

idInt :: Bar Int -> Bar Int
idInt = id

idChar :: Bar Char -> Bar Char
idChar = id

main = let quux = bar …
Run Code Online (Sandbox Code Playgroud)

polymorphism haskell let monomorphism

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

关于Racket中"参数化"和"让"的评估顺序是什么?

在关于参数化的 "球拍指南"中,有以下代码:

(define location (make-parameter "here"))

(let ([get (parameterize ([location "with a fox"])
             (lambda () (location)))])
  (get))
Run Code Online (Sandbox Code Playgroud)

代码返回"here".

评估这段代码的顺序是什么?谢谢.

lisp evaluation scheme let racket

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

Scheme/Racket中lamb的lambda定义是什么?

今天我试着理解如何让我们在Scheme/Racket中使用lambda演算的上下文,但是我无法弄清楚如何将let的等效写为lambda函数.

我认为它的一般形式应该是这样的:

((lambda (p1 p2...) body) v1 v2...)
Run Code Online (Sandbox Code Playgroud)

但绝对不是一个完整的函数定义.

对此有正确/完整定义的想法吗?

先感谢您!

lambda scheme let racket

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

表达式解析为未使用的I值

我是Swift的新手,我正在尝试更改按钮的背景颜色.

chicken1用来一起改变按钮的背景颜色

但我一直收到这个错误

表达式解析为未使用的I值"

这是当前的代码.

let chicken1 = button1; button2
chicken1.backgroundColor = UIColor.blueColor()
Run Code Online (Sandbox Code Playgroud)

我也应该使用'var'insted吗?

var let ios swift

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

clojure for function resetts let

我试图在4clojure.com上解决一个问题,我应该在不使用的情况下计算集合中的元素数量count.我曾尝试用两种方式forlet我觉得应该工作,但它似乎对环保持复位let.

(#(for [x %  :let [y 0]] (inc y)) [1 2 3 4 5])
;; which returns
(1 1 1 1 1)

(#(let [y 0] (for [x %] (inc y))) [1 2 3 4 5])
;; which returns
(1 1 1 1 1)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么会发生这种情况,以及如何让我的"变量"继续为集合中的每个项目增加值.只是说变量这个词让我想知道我是不是想做一些不可能的东西,但我仍觉得这应该有用.

variables for-loop clojure let

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

让Haskell中的递归

可能有人解释这与下面的输入一小段代码的行为:[[1,2],[3,4]]

infiniteList ls = let v = ls ++ v
                  in concat v
Run Code Online (Sandbox Code Playgroud)

结果是一个无限的列表,但我没有意识到为什么.我明白了诀窍在于:

ls ++ v
Run Code Online (Sandbox Code Playgroud)

但是,因为我们没有定义变量的初始值,所以如何正常工作v

recursion haskell list infinite let

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

当为它们分配抛出错误的函数的返回值时,导致"var"和"let"之间的不同行为的原因

请在下图中找到代码.1.将函数的返回值(实际上抛出一个错误)分配给使用关键字"let"声明的变量'withLet'.2.调用'withLet',发生错误:'withLet未定义'.3.尝试使用'let'断言'withLet',错误显示已经声明'withLet'.

但是'var'不存在悖论(请参见下图).

我很好奇是什么导致了这两种情况之间的不同行为.它是非常有线的,"未定义","已经声明"描述了一个相同的变量.

let withLet = (function() {throw 'error!'})()
var withVar = (function() {throw 'error!'})()
//VM2470:1 Uncaught error!
//(anonymous) @ VM2470:1
//(anonymous) @ VM2470:1
withLet
//VM2484:1 Uncaught ReferenceError: withLet is not defined at 
//<anonymous>:1:1
//(anonymous) @ VM2484:1
withVar
//undefined
let withLet = 'sth'
//VM2520:1 Uncaught SyntaxError: Identifier 'withLet' has already been 
//declared
//at <anonymous>:1:1
//(anonymous) @ VM2520:1
withVar = 'sth'
//"sth"
Run Code Online (Sandbox Code Playgroud)

截图:

javascript var let throw

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

Kotlin`..let`是线程安全的吗?

Kotlin ?.let线程安全吗?

假设a变量可以在不同的线程中更改。使用a?.let { /* */ }线程安全吗?如果等于,那么是否if (a != null) { block() }可能其中if不为null且block其中已经为null?

multithreading let thread-synchronization kotlin

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