Đây là pattern matching. Từ liên kết:
Các chức năng có thể bao gồm một hoặc nhiều quy tắc. Một quy tắc bao gồm tên hàm, mẫu đối số và biểu thức của nó. Khi hàm được gọi là các giá trị đối số sẽ được khớp với các mẫu trong thứ tự từ trên xuống. Các hàm sử dụng đối sánh mẫu rất giống với các biểu thức trường hợp
Điều này có nghĩa là đường ống phân cách các trường hợp khớp mẫu. So khớp mẫu khớp với các mẫu đặc biệt và thực hiện các biểu thức cụ thể dựa trên mẫu đó. Họ làm theo cú pháp:
fun <fun-name> <pattern>
| <fun-name> <pattern>
| <fun-name> <pattern>;
đâu <pattern>
là:
<args> = <expressions>
Trong ví dụ đầu tiên của bạn, nó được tuyên bố chức năng fac
để tính giai thừa. Mẫu đầu tiên là khi đối số, int
là 0. Nếu int
bằng 0, biểu thức của trường hợp đó sẽ thực thi, và trong trường hợp này nếu đối số được truyền là 0, kết quả sẽ là 1 (vì 0 giai thừa là 1). Nếu đối số đã vượt qua, không phải là 0 thì nó tuân theo mẫu tiếp theo (vì nó không khớp với mẫu đầu tiên). Nếu đối số được truyền là, nói 2, nó sẽ thực hiện đệ quy và tìm giai thừa cho phù hợp.
Hãy xem xét đoạn mã dưới đây:
fun past "run" = "ran"
| past "swim" = "swam"
| past x = x^"ed";
Chúng ta định nghĩa hàm có tên past
rằng có một đối số và tìm thấy những căng thẳng thông qua các cuộc tranh cãi. Mẫu đầu tiên tương đương với - bằng tiếng Anh đơn giản:
nếu từ (hoặc đối số được truyền) là "chạy", thì thì được truyền là "chạy".
Các mô hình thứ hai là tương đương với:
nếu từ (hoặc đối số truyền) là "bơi", các căng thẳng thông qua là "bơi".
Nếu từ không phải là "bơi" hoặc "chạy" (và do đó hai mẫu không khớp) tiếp tục với mẫu cuối cùng, chỉ thêm "ed" vào cuối từ.
Với ví dụ bạn có thể thấy các biểu tượng riêng biệt |
(ống). Bạn có thể nghĩ về các mẫu như mã giả này:
if argument is "run", then passed tense is "ran"
else if argument is "swim", then passed tense is "swam"
else add "ed" to end of word
Kết hợp mẫu được sử dụng để bao gồm các trường hợp bất thường.Kể từ khi "chạy" và "bơi" là bất thường thông qua các tenses, chúng tôi bao gồm những trường hợp với các mẫu. Nguyên tắc chính xác tương tự áp dụng cho ví dụ đầu tiên - 0! là một trường hợp đặc biệt, đó là 1. Bởi vì điều này, chúng ta có thể sử dụng mẫu phù hợp để khớp với trường hợp cụ thể trong đó đối số là 0 và thực thi theo trường hợp cụ thể đó.
Bạn có thể giải thích cách bài đăng này không vi phạm https://meta.stackoverflow.com/questions/351354/ cần-i-be-trả lời-mã-yêu cầu? Tôi hợp pháp không hiểu. – gregblass
@gregblass Câu hỏi này không yêu cầu phải có một số mã được viết cho chúng, nó yêu cầu giải thích khái niệm. – Li357