更新: List.function のものは使用できません。
私はOCamlが初めてで、値のリストから非減少値のリストを計算することになっているこのコースを学んでいます。
たとえば、リスト [1;] があります。2; 3; 1; 2; 7; 6]
したがって、リストを受け取る関数 mono は次を返します。
# mono [1; 2; 3; 1; 2; 7; 6];;
- : int list = [1; 2; 3; 7]
私は次のことを行います:
let rec calculateCheck value lst = (
match lst with
[] -> true
| x :: xs -> (
if (value < x) then
false
else
calculateCheck value xs
)
);;
let rec reverse_list lst = (
match lst with
[] -> []
| x :: xs -> (
reverse_list xs @ [x]
)
);;
let shouldReverse = ref 1;;
let cancelReverse somelist lst = (
shouldReverse := 0;
reverse_list lst
);;
let rec mono lst = (
let somelist = ref lst in
if (!shouldReverse = 1) then
somelist := cancelReverse somelist lst
else
somelist := lst;
match !somelist with
[] -> []
| x :: xs -> (
if (calculateCheck x xs) then
[x] @ mono xs
else
[] @ mono xs
);
);;
問題?
- shouldReverse のため、これは 1 回しか機能しません。
- 値を逆にすることはできません。
mono list
非減少リストを返す必要があります。
質問?
- これを行う簡単な方法はありますか?
- 具体的には、リストのサブセットを取得する方法。たとえば、[1; 2; 3; 5; 6]、[1; が欲しい。2; 3] 5 の出力として、この問題を再帰的に解決できるようにします。もう 1 つは、リストを [1; として使用できることです。2; 3; 5; 6; 5]:: したがって、2 番目の 5 の出力は [1; 2; 3; 5; 6]。
何か案は?
ありがとう