簡體   English   中英

包含在OCaml開頭的列表的過濾器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM