Một chức năng đơn giản như thế này append (trong F #):Làm cách nào để triển khai danh sách đuôi đệ quy?
let rec app s t =
match s with
| [] -> t
| (x::ss) -> x :: (app ss t)
sẽ sụp đổ khi s trở nên lớn, vì chức năng không phải là đệ quy đuôi. Tôi nhận thấy rằng chức năng nối thêm tiêu chuẩn của F # không sụp đổ với các danh sách lớn, vì vậy nó phải được thực hiện khác nhau. Vì vậy, tôi tự hỏi: Làm thế nào để một định nghĩa đuôi đệ quy của phụ thêm như thế nào? Tôi đã đưa ra một cái gì đó như thế này:
let rec comb s t =
match s with
| [] -> t
| (x::ss) -> comb ss (x::t)
let app2 s t = comb (List.rev s) t
hoạt động, nhưng có vẻ hơi lạ. Có một định nghĩa thanh lịch hơn?
Trong ví dụ đầu tiên, điểm phù hợp với việc thực hiện mẫu trên b là gì nếu nó giống nhau trong tất cả các mẫu? Bạn có thể chỉ cần sử dụng b – Rubys
@Rubys: một lựa chọn phong cách, không chính xác cũng không chính xác;) – Juliet
Bạn chắc chắn nó đang hoạt động? Tôi nhận được > append2 [1; 2] [3; 4] ;; val it: int list = [2; 3; 4] và > append3 [1; 2] [3; 4] ;; val it: int list = [1; 3; 4] Mặc dù tôi không thấy lỗi, nhưng append2 có vẻ ổn với tôi .. – martingw