Ocaml 错误:未绑定的值为
我正在学习ocaml,我正在尝试编写一个简单的函数,它可以输出作为int参数给出的第一个参数 我所写的:Ocaml 错误:未绑定的值为,ocaml,Ocaml,我正在学习ocaml,我正在尝试编写一个简单的函数,它可以输出作为int参数给出的第一个参数 我所写的: let rec take(number, lista)= let rec take_acc(number, lista, acc)= match number with | 0 -> [] | number < 0 -> [] | number > lista.length ->
let rec take(number, lista)=
let rec take_acc(number, lista, acc)=
match number with
| 0 -> []
| number < 0 -> []
| number > lista.length -> lista
| number < lista.length -> take_acc(number-1, lista.tl, acc@lista.head);;
take_acc(number, lista, [])
let listas = 1 :: 2 :: 3 :: 4 :: 5 :: 6 :: [];;
take(2,listas);;
我做错了什么
关键是该代码可以工作:
let xxl = 11 :: 33 :: 54 :: 74 :: [];;
let rec take2 (ile,xxx) =
if ile=0 || ile<0 then []
else
if ile>(List.length xxl) then take2(ile-1,xxx)
else
List.hd xxx :: take2(ile-1,List.tl xxx);;
让xxl=11::33::54::74::[];;
让记录2(ile,xxx)=
如果ile=0 | | ile(List.length xxl),则取2(ile-1,xxx)
其他的
List.hd xxx::take2(ile-1,List.tl xxx);;
这两个节目的区别在哪里
编辑:
根据Jeffrey Scofield的建议,我写了如下内容:
let rec take2(ilosc, lista) =
let rec take_acc(ilosc, lista, acc) =
if ilosc = 0 || ilosc < 0 then []
else
if ilosc > List.length lista
then lista
else
take_acc(ilosc-1, lista.tl, acc@lista.hd);;
let listas = 1 :: 2 :: 3 :: 4 :: 5 :: 6 :: [];;
take2(2,listas);;
let rec take 2(ilosc,lista)=
让rec采取行动(ilosc、lista、acc)=
如果ilosc=0 | | ilosc<0,则[]
其他的
如果ilosc>List.length lista
然后是lista
其他的
采取行动(ilosc-1,列表A.tl,acc@lista.hd);;
让listas=1::2::3::4::5::6::[];;
take2(2,listas);;
还是一样 您的代码的语法格式不正确。因此,它永远无法达到说take没有定义的程度 首先要修复的是模式的使用。构造
number<0
不是一个模式,它是一个布尔表达式。在下列情况下,可以使用将布尔值作为模式的一部分:
| _ when number < 0
当数字<0时,|uu
然而,对于您想要测试的内容来说,这并不是特别好的样式。在测试中使用if
可能更好
接下来要解决的问题可能是使用lista.length
。在OCaml中获取列表长度的方法是list.length lista
谢谢。我已经编辑了我的答案。你能帮我评论一下吗?这在语法上仍然不正确。我建议你把语法正确性作为你的第一个目标。
| _ when number < 0