Tôi có đoạn code sau:SML - biến cởi ra hoặc constructor
datatype expr = K of string| Number2 of expr * (expr list);
datatype number = Number1 of string | Number3 of int;
fun append (nil, l2) = l2
| append (x::xs, l2) = x::append(xs, l2);
fun map [] = []
| map (h::t) = (What h)::(map t);
fun What (K x) = [Number1(x)]
|What (Number2 (t,[])) = Number3(0)::What(t)
|What (Number2 (y,a::b)) = append(What(a), map(b));
Nó không công nhận chức năng "gì" (biến cởi ra hoặc constructor).. Làm thế nào tôi có thể sửa chữa nó, rằng nó sẽ biết chức năng "Cái gì"?
Cảm ơn.
Cảm ơn bạn Nicholas, tôi chỉ đối phó với điều này và tôi ngăn xếp. "b" có thể là danh sách expr. Tôi chỉ muốn kiểm tra từng expr trong danh sách đó và quyết định nếu nó "Number1" hoặc "Number3" hoặc loại dữ liệu expr - tất cả điều này tôi làm theo chức năng gì. Ý tưởng duy nhất là sử dụng "bản đồ" để kiểm tra từng thành viên trong danh sách. Nhưng nó đưa ra một lỗi: "toán hạng và toán tử không đồng ý". Bất kỳ ý tưởng? –
Các loại của bạn rất bối rối. Thứ nhất, có: b chắc chắn là một danh sách của expr. Tất cả đều là exprs: không có Number1 hoặc Number3s trong b. Bạn sẽ phải giải thích cho chúng tôi những gì bạn đang cố gắng làm, bởi vì tôi không nghĩ rằng chúng tôi có cơ hội giúp bạn nếu không. Bạn có nhận ra rằng chức năng bản đồ của bạn rất khác với bản đồ bình thường? Có lẽ đó là sự nhầm lẫn. Bạn cũng bỏ qua y; là expr có nghĩa là để được sử dụng cho một cái gì đó? –
Tại sao chức năng của tôi lại khác với bản đồ bình thường? Tôi sẽ làm rõ câu hỏi của tôi: Số 2 là expr và có thể là danh sách expr. Bây giờ, Nếu nó là một danh sách của expr, Vì vậy, tôi muốn kiểm tra mỗi thành viên trong danh sách đó, và để tìm hiểu xem nó K hoặc Number2. Sau đó, tôi cần phải quyết định làm gì với thành viên này (Nó có thể là Number1 hoặc Number3, hai dòng đầu tiên của tôi trong hàm What), và tạo một danh sách chỉ chứa Number1 hoặc Number3. vì vậy, cách trực quan của tôi là sử dụng bản đồ để kiểm tra từng thành viên trong "b", gỡ bỏ phần cuối của danh sách, bằng cách sử dụng chức năng bản đồ. Cảm ơn bạn. –