我试图做一个函数,定义一个矢量,根据函数的输入而变化,并设置!在Scheme中很有用。 OCaml中有这个功能吗?OCaml中是否存在与“set!”相同的函数?在计划?
回答
我同意sepp2k你应该扩大你的问题,并给出更详细的例子。
也许你需要的是参考文献。
作为一个粗略的估计,你可以看到他们的变量可以给它分配:
let a = ref 5;;
!a;; (* This evaluates to 5 *)
a := 42;;
!a;; (* This evaluates to 42 *)
这里是http://caml.inria.fr/pub/docs/u3-ocaml/ocaml-core.html更详细的解释:
的语言,我们已经如此描述远远是纯粹的功能。也就是说,对同一个表达式的几次评估总会产生相同的答案。例如,这可以防止计数器的实现,该计数器的接口是单个函数next : unit -> int
,递增计数器并返回其新值。重复调用此函数应返回一系列连续的整数 - 每次都有不同的答案。
实际上,计数器需要记住它在某个特定位置的状态,并具有读/写访问权限,但最重要的是,必须在两次调用之间共享某些信息。解决方案是使用可变存储,并通过所谓的副作用与商店进行交互。
在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;;
事实上,在OCaml中,引用不是原始的:它们是可变记录的特例。例如,可以定义:
type 'a ref = { mutable content : 'a }
let ref x = { content = x }
let deref r = r.content
let assign r x = r.content <- x; x
这正是我正在寻找的!谢谢! – Balthasar
set!
在Scheme中赋值给一个变量。根本不能在OCaml中分配变量。 (所以“变量”并不是真的“可变的”)。所以没有相应的东西。
但OCaml不是一种纯粹的功能语言。它有可变的数据结构。下面的事情可被分配给:
- 数组元素
- 字符串元素
- 记录易变字段
- 对象
在这些情况下的可变的多个领域,<-
语法用于分配。
@jrouquie提到的ref
类型是一种简单的内置可变记录类型,它充当一个可变容器。 OCaml还提供!
和:=
运营商与ref
s合作。
- 1. 是否存在与SQL Server NewId()函数相同的Access?
- 2. 是否存在与Marklogic相同的liquibase
- 3. 是否有与SBCL的运行计划等同的计划?
- 4. 在opencv中是否有与matlab conv2相同的函数?
- 5. SQL Server视图执行计划:是否与UNION相同?
- 6. 是否存在与下划线(_)连续相反的内容?
- 7. 在OCaml中,是否可以根据Set定义Map?
- 8. 是否存在与C++ std :: setw(int)函数相当的Ruby?
- 9. 是否存在与__import__相当的__reload__函数?
- 10. 测试函数是否与已知函数的行为相同
- 11. DrRacket中是否有相当于set-car!和set-cdr!在SICP?
- 12. 计划在析构函数
- 13. 回调函数是否与嵌套函数相同?
- 14. 在cookie解析器和会话中存储的secret set是否与express.js中的相同?
- 15. 该计划在URI中是否可选?
- 16. Matlab中是否存在函数缓存?
- 17. PostgreSQL在相同的查询上接近计划缓存?
- 18. super()和this()是否出现在相同的构造函数中?
- 19. 是否存在与gitosis相当的Mercurial?
- 20. 存储器中的整数是否与对象相同?
- 21. 计划任务是否以与网页相同的方式加载Application.cfc?
- 22. 在python中是否有与MATLAB函数bsxfun相当的功能?
- 23. 是否存在与jQuery的scrollTo相同的YUI 2.x?
- 24. Thrust中是否存在boost计算函数的类比?
- 25. C中的函数参数是否总是具有相同的内存地址?
- 26. 检查函数是否与C中的typedef函数类型相同?
- 27. 是否ocaml memoize递归函数
- 28. 什么是与MySQL命令“SET NAMES utf8”具有相同动作的PHP函数?
- 29. 如何检查两个数组中是否存在与php相同的值
- 30. 如何确定鸡计划中是否存在变量?
你的意思是'set!'或'vector-set!'?如果你的意思是'set!',你能描述一下你在描述的场景中如何使用'set!'? – sepp2k
我的意思是“set!”什么,我试图做会去像这样一个简单的例子: (定义四个 4) (定义五(设4 5)!) – Balthasar
^^^所以现在“四个一”被设定为5 – Balthasar