将函数作为参数,元组或具有两个论点的函数传递

时间:2020-08-22 21:16:05

标签: scala

我已经负责实现此功能,无论输入数组是否已排序,该功能都应返回true或false

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int a = 1;
    int b = 666;
    int c = 0;
    int d = 1;
    int z = 0;
    int k = 0;

    char * decimals = (char*)malloc(sizeof(char) * 3);
    if (!decimals)
    {
        printf("alloc failed!");
        return 1;
    }
    sprintf(decimals, "0.");

    size_t len = 2;
    while (d > 0 && k++ < 1000)
    {

        printf("a: %d   ", a);
        printf("b: %d   ", b);
        printf("c: %d   ", c);
        printf("d: %d\n", d);

        if (a < b)
        {
            a = a * 10;

            if (a < b)
            {
                len += 2;
                char *temp = (char *)malloc(sizeof(char) * len);
                if (!temp)
                {
                    printf("alloc failed!");
                    break;
                }

                snprintf(temp, len, "%s%d", decimals, z);
                free(decimals);
                decimals = temp;
                printf("%s\n\n", decimals);
            }
            else
            {
                c = a / b;
                d = a - b * c;
                a = d;

                len += 2;
                char *temp = (char *)malloc(sizeof(char) * len);
                if (!temp)
                {
                    printf("alloc failed!");
                    break;
                }
                snprintf(temp, len, "%s%d", decimals, c);
                free(decimals);
                decimals = temp;
                printf("%s\n\n", decimals);
            }
        }
    }

    free(decimals);
}

不是,我对def isSorted[A] (as: Array[A], ordered: (A,A) => Boolean): Boolean = ??? 有点困惑,它看起来像“有序”变量是元组类型,但是它看起来也像是一个带有两个参数的函数。是两者中的哪一个?

1 个答案:

答案 0 :(得分:2)

它是两个参数的函数。一个元组参数的函数写为((A, A)) => Boolean

单个参数的函数通常可以在参数类型周围不加任何括号的情况下编写,但是正如您所注意到的那样,这是模棱两可的。通过使用二进制函数类型可以解决歧义,您可以通过使用一组额外的括号来避免歧义。