Tại sao chức năng này không chấm dứt trong Haskell?


8

Tôi bối rối tại sao chức năng của tôi nestfkết hợp với chính nó nlần

nest f 0 = id
nest f n = f . nest f (n - 1)

không bao giờ chấm dứt. Tôi đã nghĩ rằng nó sẽ "khớp mẫu" trong trường hợp khi ntrở thành số không. Tôi đang xác định nó bằng cách gõ hai dòng này vào GHCI và gọi bằng nest (+ 1) 2 3ví dụ.


4
Chúng ta cần thêm. Làm thế nào để bạn xác định và tải chức năng này? Làm thế nào bạn gọi chức năng này? Khi tôi lưu nó dưới dạng tệp, tải nó bằng GHCi 8.6.4 và gọi nó khi nest (+1) 3 2nó kết thúc 5.
Thomas M. DuBuisson

1
Ồ! thật thú vị. Tôi đã dán vào GHCI và gọi nó giống như bạn với nest (+1) 3 2.
Jon Deaton

Câu trả lời:


12

Bằng cách gõ hàm trên hai dòng REPL riêng biệt, về cơ bản bạn đang xác định lại nó lần thứ hai, bỏ qua trường hợp cơ sở.

Cách chính xác để nhập chức năng này vào REPL là:

nest f 0 = id; nest f n = f . nest f (n - 1)

Ngoài ra, bạn có thể vào chế độ đa dòng bằng :{lệnh và để nó sử dụng :}.


6

Khi bạn dán nó vào GHCi, những gì bạn đã làm là xác định một chức năng của nest f 0 = id. Sau đó, bạn nói "bỏ qua chức năng đó, tôi sẽ thay thế nó bằng một chức năng mới cùng tên với toàn bộ định nghĩa nest f n = f . nest f (n - 1).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.