[英]A filter that contain a list in the beginning in OCaml
我想創建一個以二進制形式返回下一個數字的函數。 例如 :
000-> 001-> 010-> 011-> 100-> 101-> 110->111。我的功能是:
let rec next_number = function
| [] -> []
| (a,b)::[] -> if b = 0 then (a,1)::[] else (a,0)::[]
| l::(a,value1)::(b,value2)::[] -> if (value2 = 0) then l::(a,value1)::(b,1)::[]
else
begin
if value1 = 0 then l::(a,1)::(b,0)::[]
else (next_number l)::(a,0)::(b,0)::[]
end
;;
編譯時出現錯誤:該表達式(l在l ::((a,value1)::( b,value2):: []中)的類型為'a * int,但期望的表達式類型為('a * int)清單
如何告訴OCaml過濾器是一個列表,然后是一對,然后是一對,然后是一個空列表,而不是3對,然后是空列表。
謝謝你的幫助。
沒有與列表前綴匹配的模式。 如果您將值想象為樹,則模式總是從某個點開始匹配完整的子樹。 列表的前綴沒有這種形式。 當您選擇完整的子樹時,您將獲得整個列表。
如果您的算法需要從列表的后面到列表的前面工作,則可能需要在開始之前反轉列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.