我尝试去通过列表xl的List.fold_left,我想退出迭代时,一些条件得到满足:
List.fold_left
(fun x acc ->
if x = 5 then STOP THE ITERATION
else x + acc)
xl
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何在STOP THE ITERATION这里表达?谢谢
编辑1:根据上面的代码,我想说我们不会停止累积,直到我们遇到第一个5.
type node = {
lan: string;
lat: string;
};;
let rec read_nodes_from_list list = match list with
| Xml.Element("node", _, _)::list' -> {lan="A"; lat="B"}::read_nodes_from_list list'
;;
Run Code Online (Sandbox Code Playgroud)
我试过这个来创建一个节点记录,但它不起作用.假设我有另一种类型具有相同属性的节点,如何告诉ocaml要创建哪种类型的对象?
谢谢.
好奇,如果有人可能对如何对二进制数进行以下操作有一些见解:
兑换
01+0 -> 10+1 (+ as in regular expressions, one or more)
01 -> 10
10 -> 01
Run Code Online (Sandbox Code Playgroud)
所以,
10101000010100011100
01010100101010100010
Run Code Online (Sandbox Code Playgroud)
并澄清这不是一个简单的反转:
000000100000000000
000001010000000000
Run Code Online (Sandbox Code Playgroud)
我正在考虑正则表达式,但我正在使用二进制数,并希望保持这种状态.这个讨厌的黑客页面也没有给我任何见解.这显然具有细胞自动机的一些本质.那么,任何人都有一些可以解决这个问题的操作吗?(不需要代码,我知道该怎么做).
我有以下定义类型,并尝试评估该函数作为示例:
let evn =[("z1",Int 0);("x",Int 1);("y",Int 2);("z",Int 3);("z1",Int 4)];;
val evn : (string * Nano.value) list = [("z1", Int 0); ("x", Int 1); ("y", Int 2); ("z", Int 3); ("z1", Int 4)]
# let e1 =Bin(Bin(Var "x",Plus,Var "y"), Minus, Bin(Var "z",Plus,Var "z1"));;
val e1 : Nano.expr = Bin (Bin (Var "x", Plus, Var "y"), Minus, Bin (Var "z", Plus, Var "z1"))
# eval (evn,e1);;
- : Nano.value = Int 0
# eval (evn,Var "p");;
Exception: Nano.MLFailure "Variable not bound: p". …Run Code Online (Sandbox Code Playgroud) 我对我的代码感到困惑:
let sum l = match l with
| [] -> 0.0
| h::t -> h +. (sum t);;
Run Code Online (Sandbox Code Playgroud)
它应该给我列表中的数字总和.但是,当我检查代码时,我发现第二个代码在使用长度大于或等于7的列表时崩溃.这是代码:
# sum [0.;1.;2.;3.;4.;5.;]
- : float = 15.
# sum [0.;1.;2.;3.;4.;5.;6.]
- : float = 21.
# sum [0.;1.;2.;3.;4.;5.;6.;7.]
- : float = 21.
Run Code Online (Sandbox Code Playgroud)
我真的很困惑,因为对int进行操作的修改结果是正常的:
let rec sumf l = match l with
| []-> 0.0
| h::t-> (float_of_int h) +. sumf t;;
Run Code Online (Sandbox Code Playgroud)
除了我在第二个代码中将int转换为float之外,我不知道两者之间的本质区别是什么.
我将树类型定义为
type 'a tree = Nil | Node of ('a tree * 'a * 'a tree)
Run Code Online (Sandbox Code Playgroud)
我需要在这个树中构建一个元素列表.我试过(没有尾递归):
let elements t =
let rec walk node =
match node with
| Nil -> []
| Node(lChild, x, rChild) ->
(walk lChild) :: [x] :: (walk rChild)
in
walk set
Run Code Online (Sandbox Code Playgroud)
但是我得到一个类型错误:表达式(walk lChild)有类型'a list但是表达式需要类型'a
所以我想我的问题可以简化为"如何将一个元素列表添加到列表中".
谢谢!