gpt4 book ai didi

pattern-matching - 管道 (|) 在 ML 编程中是什么意思?

转载 作者:行者123 更新时间:2023-12-03 14:11:53 24 4
gpt4 key购买 nike

例如下面的函数:

fun fac (0 : int) : int = 1
| fac (n : int) : int = n * fac (n - 1)

或者在函数中:
fun even 0 = true
| even x = odd(x-1)
and odd 0 = false
| odd x = even(x-1);

我对机器学习几乎没有经验,我只是想了解基础知识。

最佳答案

这是 pattern matching .从链接:

Functions may be composed of one or more rules. A rule consists of its function-name, an argument pattern and its expression. When the function is called the argument values will be matched to the patterns in top down order. Functions using pattern-matching are very similar to case expressions



这意味着管道将案例分开以进行模式匹配。模式匹配匹配特殊模式并基于该模式执行特定表达式。它们遵循以下语法:
fun <fun-name> <pattern>
| <fun-name> <pattern>
| <fun-name> <pattern>;

哪里 <pattern>是:
<args> = <expressions>

在您的第一个示例中,它声明了函数 fac用于阶乘计算。第一个模式是当参数, int是 0。如果 int为 0,则执行该 case 的表达式,在这种情况下,如果传递的参数为 0,则结​​果将为 1(因为 0 阶乘为 1)。如果传递的参数不是 0,则它遵循下一个模式(因为它与第一个模式不匹配)。如果传递的参数是 2,它将执行递归并相应地找到阶乘。

考虑下面的片段:
fun past "run"  = "ran"
| past "swim" = "swam"
| past x = x ^ "ed";

我们定义名为 past 的函数它接受一个参数并找到该参数的传递时态。第一个模式相当于 - 用简单的英语:

如果单词(或传递的参数)是“run”,传递的时态是“ran”。

第二种模式相当于:

如果单词(或传递的参数)是“游泳”,则传递的时态是“游泳”。

如果单词既不是“swim”也不是“run”(因此两个模式不匹配)继续最后一个模式,它只是在单词的末尾添加“ed”。

通过示例您可以看到 | (管道)符号分隔模式。你可以想象这样的模式:
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

模式匹配用于覆盖不规则的情况。由于“跑”和“游泳”是不规则的通过时态,我们用模式涵盖了这些情况。完全相同的原则适用于第一个示例 - 0!是一个特殊情况,它是 1。因此,我们可以使用模式匹配来匹配参数为 0 的特定情况,并根据该特定情况执行。

关于pattern-matching - 管道 (|) 在 ML 编程中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40372232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com