こんにちはすべて私はOcamlでリストを平坦化しようとしています。私は初心者ですので、私の間違いが愚かであれば私を許してくださいOcamlでリストを平坦化するコードにエラーがあります
例えば、入力が[[1]; [2; 3]; [4]]なら、私は[1; 2; 3 ; 4]。
func flatten(list, accumalator)
For each item from right to left in list
If Item is a scalar then n :: accumalator
Else fi Item is a list of form head :: tail then
head :: flatten (tail, accumalator).
を次のように疑似コードがあるaccumaltorと(fold_rightを使用して)右からリストを 反復を次のように私が使用しようとしていますアイデアは[] =である 私はその理論的に考えますアルゴリズムは正しいですが、あなたが同意しない場合は私に知らせてください。
今私のOCamlのコードこのアルゴリズムを実装する
let rec flatten acc x =
match x with
n -> n :: acc
| [x] -> x :: acc
| head :: remainder ->
head :: (my_flat acc remainder)
and my_flat = List.fold_right flatten
;;
my_flat [] [[1];[2;3];[4]]
に私が得るエラーは以下の エラー:この式は、入力した「式が、タイプ に期待された」リスト
マッチステートメントの最後のパターンのhead ::(my_flat acc remainder)という行にエラーが発生しました
助けていただければ幸いです。
これは宿題の問題ではありません。私自身Ocamlを教えようと努力し、http://www.christiankissig.de/cms/index.php/en/programming/28-ocaml/28-99-problems-in-ocamlで問題を実践しようとしています。リスト内の要素のタイプについてのアドバイスをありがとう。私は上の私の例を修正した – ppaul74
偉大な - 宿題の問題ではありません。私は新しい質問に答えるために私の答えを編集します。よろしく、 –