我正在研究家庭作业的解决方案,代码实现了一个OCaml函数,它接受两个参数,但是当它被调用时,它只传递一个参数。
let rec func2 r x = match r with
| [] -> []
| (nt,rhs)::t -> if nt = x then rhs::(func2 t x) else func2 t x;;
let func1 r = fun x -> func2 r x;;
我将按照如下语法规则调用func1 ( func1 awksub_rules )
let awksub_rules = [
Expr, [T"(";
我需要一个在每次迭代中递归返回(而不是打印)列表中所有值的函数。但是,每次我尝试对此进行编程时,我的函数都会返回一个列表。
let rec elements list = match list with
| [] -> []
| h::t -> h; elements t;;
每次在我编写的另一个函数中返回每个元素时,我都需要使用每个元素,所以我一次只需要一个元素,但是我不能弄清楚这一部分。任何帮助都将不胜感激。
我在Ocaml中处理列表,所以我编写了一个打印列表内容的函数。下面是我的代码: let leastB = [false; true; true; true; true; false; false; false; true]
let leastI = [-16; 4; 7; 3444; -100]
let prListInt l =
Printf.printf "[";
let rec prListIntrec l =
match l with
[] -> Printf.printf "]\n"
| g :: []
使用循环将一组元素添加到带有mylist = []的列表中
for x in otherlist:
mylist.append(x[0:5])
但我得到的不是预期的结果'x1','x2',...,而是u'x1',u'x2',....美国是从哪里来的,为什么?另外,有没有更好的方法遍历另一个列表,将每个元素的前六个字符插入到一个新的列表中?
这似乎是一件奇怪的事情,当然欢迎您提出更好的方法。
这是我的目标:
我想滚动浏览传递给函数的列表中的每个元素。如果它是构造函数Y的,那么我想在它上面调用一些函数。如果它是构造函数Z的,我想跳过它。
如果有一种方法可以在If语句中检查这一点,那么这似乎是可行的方法,因为我不需要编写其他语句。然而,我只知道如何在比赛中检查这个。
例如:
let myFunct list =
List.iter (fun x -> match x with
| Y y -> otherFunction y
) list;;
现在,这给了我一个关于不能处理Z的警
早上好,我在使用ocaml编码时遇到了问题,所以我不得不编写一个函数,该函数接受输入列表,然后向该列表中添加一个元素。但是使用它并不会影响list1,那么我该怎么做呢?谢谢。
let rec append list1 element list2 = match list2 with
[]-> list1
| e::l -> if ( element = e ) then e :: list1
else (append list1 element l)
;;
我有一个函数sqrt,它接受2个浮点值,公差和数字,并给出指定公差内数字的平方根。我用近似的方法来做。
let rec sqrt_rec approx tol number =
..................;;
let sqrt tol x = sqrt_rec (x/.2.0) tol x;;
我有另一个函数映射,它接受一个函数和一个列表,并将该函数应用于列表中的所有元素。
let rec map f l =
match l with
[] -> []
| h::t -> f h::map f t;;
现在我尝试创建另一个函数all_sqrt,它基本上接受1个浮点值,1
我试图通过附加到一个列表来创建一个唯一的列表,但是我得到了这个错误。
Error: This expression has type 'a list
but an expression was expected of type unit
in_list是一个布尔函数,用于检查值是否在列表中。
if(in_list x seen_list) then print_string("Already found") else seen_list@x in
List.iter uniq check_list;;
似乎我需要为append函数修复一些小的语法错
let rec insert cmp e = function
| [] -> [e]
| h :: t as l ->
if cmp e h <= 0 then e :: l
else h :: insert cmp e t
let rec sort cmp = function
| [] -> []
| h :: t -> insert cmp h (sort cmp t)
let length_sort lists =
let lists = List.map (fun list -> List.leng
如何计算Ocaml中列表中某个特定元素的出现量?
count 2 [1;2;2;2;2;3;4;5] # should return 4
我很难弄清楚折叠是如何工作的,我将如何在这里应用它。我试着做:
count element list = fold (fun f ele head -> if ele = head then 1 else 0) 0 list
但我的测试一直都是0?
编写任何类型为('a -> 'b) list -> 'a -> 'b list的Ocaml函数
('a -> 'b) list是最让我困惑的部分。我是OCaml新手,很难理解如何编写函数以获得特定的数据类型。
# let int x = x+1;;
# let fcn = [int; int];;
所以我传递一个函数,一个函数和一个变量。我要把这个变量加到列表的每个元素中,然后返回列表?
如何编写函数返回数值列表中的最大值(如果存在)。在给它一个空列表的情况下,它不能返回数字。
我得到了:
let rec max_number_list l =
match l with
|[] -> None
|x::_ -> x
|x::xs -> max x (max_number_list xs)
我得到了这样的错误:“这个表达式有类型number,但需要一个int类型的表达式”idk how take number list和return output number选项。
从Lisp来到OCaml,我发现自己对函数何时返回、何时不返回感到非常困惑,我怀念我的神奇引语!值得庆幸的是,大多数时候,OCaml似乎会自动知道我何时需要计算函数,何时不需要。然而,我经常发现自己试图在let表达式中为函数赋值,如下所示。
let start = Sys.time in
(*
* do something here
*)
;
let ending = Sys.time in
Printf.printf "did something in %f seconds\n" (ending -. start)
但是后来ocamlc抱怨说
Error: This E
我有一个清单
let myList = ["Animals"; "Cat"; "Tiddles"; "Dog"; "Rover"]
我正在尝试创建一个函数,它将读取这些数据并返回一个对象,如下所示:
Animals([Cat("Tiddles"); Dog("Rover")])
到目前为止,我有这样的东西:
let rec readList = function
| hd :: tl -> readString hd tl
and readString hd tl =
我对OCaml中的内存管理很好奇。当通过程序调用共享列表时。例如:
let rec insertAux v acc l =
match l with
| [] -> acc
| h::t -> insertAux v ((v::h) :: acc) t;;
let insert v l = insertAux v l l;;
let rec sublist l =
match l with
| [] -> [[]]
| head::tail -> insert head (sublist tail);;
在insertAux中
我一直在试着在Ocaml的名单上找到最后一个项目。这就是我试过的。
let last2 (xs:'a list) : 'a =
List.fold_left (fun acc element -> let acc=element) acc xs;;
但没起作用。我的想法是acc将成为元素,直到列表中的最后一项。在到达列表末尾后返回acc,将给出列表中的最后一项。
有人能帮忙吗?提前谢谢。
编辑:我正在接近以下几点
let last2 (xs:'a list) : 'a =
List.fold_left (fun a b -> b)
map2_List :: (a -> b -> c) -> [a] -> [b] -> [c]
map2_List f [] _ = []
map2_List f (a:as) bs = map (f a) bs ++ map2_List f as bs
这是我的演讲中的一个例子,它试图将一个二进制函数应用于两个列表中的所有元素对。(f a)这个角色让我很困惑。它应该是一个值,而不是一个函数吗?那么map value bs是做什么的?
我已经构建了一个基于我加载的CSV文件的DataFrame。dataframe大约有60行和7列。此时DF中的所有对象都是字符串。
这就是现在的样子:
数据将在稍后被输入到DNN中,所以我需要DF中的每个对象都是元组或列表(我更喜欢元组,但我希望这两种方法都是为了以防万一)。
如何将字符串中的值拆分,使它们成为元组?
这是我的密码:
import pandas as pd
import datetime
from os import listdir
filepaths = [f for f in listdir("C:/Users/user/PycharmProjects/NDVI
在ocaml中,假设我们有:
type t = A of int | B of string
let x = [A 5; B "y"]
然后,我们可以迭代列表,并使用match语句来决定如何处理A或B。
在java中,我们可以有:
ArrayList<Object> x = new ArrayList<Object>();
x.add(new Integer(5));
x.add("y");
在数组列表迭代中,我们必须使用instanceof和downcast来处理数据。
在内部,ocaml是否将运行时类型信息作为java携带,并且类型匹
我正在编写一个递归OCaml函数,它将字符串列表中的字符串用分隔符连接起来,而不是在最后一项上放置分隔符,但是我遇到了一些问题。我知道有一个string.concat函数,但我不喜欢使用它,以便了解OCaml如何在幕后执行这些操作。这是我到目前为止所知道的:
`
let rec join (separator: string) (l: string list) : string =
begin match l with
| []-> ""
| [hd]-> hd
| hd::tl-> if hd != "" then hd^s
当我试图修改列表时,我遇到了一个问题。我有一个(string*float) list,我必须按照以下方式修改它:
1. If I find an existing string in the list, i have to change his value
2. Else I have to add the pair string(name) * float (value) to the list (don't care the position)
我向你们展示了错误的代码:
exception Not_found;;
let rec searchMake l var