Scheme OCaml中是否存在与“1”相同的等效函数;设定&引用;计划中?

Scheme OCaml中是否存在与“1”相同的等效函数;设定&引用;计划中?,scheme,ocaml,assignment-operator,Scheme,Ocaml,Assignment Operator,我正在尝试创建一个函数,该函数定义了一个向量,该向量根据函数的输入而变化,并设置!在这个方案中效果很好。OCaml中是否有类似的功能?我同意sepp2k的观点,您应该扩展您的问题,并给出更详细的示例 也许你需要的是推荐信 作为粗略的近似值,您可以将它们视为可以指定的变量: let a = ref 5;; !a;; (* This evaluates to 5 *) a := 42;; !a;; (* This evaluates to 42 *) 以下是更详细的解释: 到目前为止,我们描述的

我正在尝试创建一个函数,该函数定义了一个向量,该向量根据函数的输入而变化,并设置!在这个方案中效果很好。OCaml中是否有类似的功能?

我同意sepp2k的观点,您应该扩展您的问题,并给出更详细的示例

也许你需要的是推荐信

作为粗略的近似值,您可以将它们视为可以指定的变量:

let a = ref 5;;
!a;; (* This evaluates to 5 *)
a := 42;;
!a;; (* This evaluates to 42 *)

以下是更详细的解释:

到目前为止,我们描述的语言完全是功能性的。也就是说,对同一表达式的多个求值将始终产生相同的答案。例如,这可以防止计数器的实现,该计数器的接口是单个函数
next:unit->int
,该函数递增计数器并返回其新值。重复调用此函数应返回一个连续整数序列-每次都有不同的答案

事实上,计数器需要通过读/写访问记住其在某个特定位置的状态,但最重要的是,一些信息必须在对next的两次调用之间共享。解决方案是使用可变存储并通过所谓的副作用与存储交互

在OCaml中,计数器的定义如下:

let new_count =
  let r = ref 0 in
  let next () = r := !r+1; !r in
  next;;
另一个可能更具体的可变存储示例是银行帐户。在OCaml中,记录字段可以声明为可变的,以便以后可以为其分配新值。因此,银行账户可以是两个字段的记录、其编号和余额,其中余额是可变的

type account = { number : int; mutable balance : float }
let retrieve account requested =
  let s = min account.balance requested in
  account.balance <- account.balance -. s; s;;
type账户={number:int;可变余额:float}
让我们检索请求的帐户=
设s=中请求的最小帐户余额

account.balance我同意sepp2k的观点,你应该扩展你的问题,并给出更详细的例子

也许你需要的是推荐信

作为粗略的近似值,您可以将它们视为可以指定的变量:

let a = ref 5;;
!a;; (* This evaluates to 5 *)
a := 42;;
!a;; (* This evaluates to 42 *)

以下是更详细的解释:

到目前为止,我们描述的语言完全是功能性的。也就是说,对同一表达式的多个求值将始终产生相同的答案。例如,这可以防止计数器的实现,该计数器的接口是单个函数
next:unit->int
,该函数递增计数器并返回其新值。重复调用此函数应返回一个连续整数序列-每次都有不同的答案

事实上,计数器需要通过读/写访问记住其在某个特定位置的状态,但最重要的是,一些信息必须在对next的两次调用之间共享。解决方案是使用可变存储并通过所谓的副作用与存储交互

在OCaml中,计数器的定义如下:

let new_count =
  let r = ref 0 in
  let next () = r := !r+1; !r in
  next;;
另一个可能更具体的可变存储示例是银行帐户。在OCaml中,记录字段可以声明为可变的,以便以后可以为其分配新值。因此,银行账户可以是两个字段的记录、其编号和余额,其中余额是可变的

type account = { number : int; mutable balance : float }
let retrieve account requested =
  let s = min account.balance requested in
  account.balance <- account.balance -. s; s;;
type账户={number:int;可变余额:float}
让我们检索请求的帐户=
设s=中请求的最小帐户余额

account.balance
设置分配给变量。您根本无法在OCaml中指定变量。(所以“变量”不是真正的“变量”。)所以没有等价物

但是OCaml不是一种纯粹的函数式语言。它具有可变的数据结构。可以将以下内容分配给:

  • 数组元素
  • 字符串元素
  • 可变记录字段
  • 对象的可变域

在这些情况下,
设置分配给变量。您根本无法在OCaml中指定变量。(所以“变量”不是真正的“变量”。)所以没有等价物

但是OCaml不是一种纯粹的函数式语言。它具有可变的数据结构。可以将以下内容分配给:

  • 数组元素
  • 字符串元素
  • 可变记录字段
  • 对象的可变域

在这些情况下,
您的意思是
设置
向量集?如果你的意思是
set,您能描述一下您将如何使用
set在您描述的场景中?我的意思是“设置!”我尝试做的一个简化示例如下:(定义四个4)(定义五个(设置!四个5))^^^^所以现在“四”被设置为5。我问是因为我不明白为什么需要
设置
创建“根据输入而变化”的向量。你把4到5的例子对我来说并没有真正的答案。好吧,我现在做的是,我有一个很长的向量,它的大小根据输入而变化。由于大多数连接向量的函数不是很有效,我想创建一个向量,它本质上是一个空向量,这样我就可以根据输入将该向量更改为所需的长度之一。你可能会说我可以用make vector来完成,但我想填充这个向量,更重要的是,我想用一个命令来完成,我现在正试图定义这个命令。由于向量在实例中具有静态长度,没有连接,因此这是最佳路径。您的意思是
set
向量集?如果你的意思是
set,您能描述一下您将如何使用
set在您描述的场景中?我的意思是“设置!”我尝试做的一个简化示例如下:(定义四个4)(定义五个(设置!四个5))^^^^所以现在“四”被设置为5。我问是因为我不明白为什么需要
设置
创建“根据输入而变化”的向量。你设置四到五的例子对我来说并不能真正回答这个问题。好吧,我现在做的是,我有一个很长的向量,它是变化的