Что именно означает «частичная функция» в функциональном программировании?

<script type='text/javascript'>
var lookup = '\n\n\n\n\n\n2    PC Games        \n\n\n\n';
lookup  = lookup.trim() ;
alert(lookup );
                var tttt = 'tttt';
                alert((/\b(lookup)\b/g).test(2));

</script>

Трудно сказать, что вы пытаетесь сделать здесь. Какова должна быть переменная tttt?

В какую строку вы пытаетесь выполнить поиск? Вы пытаетесь найти 2 в строке lookup? Тогда вам нужно:

/\b2\b/.test(lookup)

Следующее из вашего регулярного выражения создает регулярное выражение, состоящее из границы слова, за которым следует строка "lookup" (а не значение, содержащееся в переменной lookup), за которым следует граница слова. Затем он пытается сопоставить это регулярное выражение со строкой "2", полученной путем преобразования числа 2 в строку:

(/\b(lookup)\b/g).test(2)

Например, следующие возвраты true:

(/\b(lookup)\b/g).test("something to lookup somewhere")
54
задан wjandrea 11 October 2019 в 16:19
поделиться

3 ответа

Вы здесь путаете два понятия. частично применялся функция [haskell-wiki] с частичная функция [haskell-wiki] .

А частично применялся , функция:

Частичное приложение в Haskell включает передача меньше, чем полное количество аргументов к функции, которая берет несколько аргументов.

, тогда как частичная функция действительно является необщей функцией:

А частичная функция является функцией, которая не определяется для всех возможных аргументов указанного типа.

73
ответ дан 7 November 2019 в 07:55
поделиться

Ответы объясняют все, я просто добавлю один пример на каждом языке:

def add(x,y):
    return x+y

f = add(1)
print(f(3))

    f = add(1)
TypeError: add() missing 1 required positional argument: 'y'

это не ни частичная функция, ни функция с приправой карри , это - только функция, которую Вы не сделали дал все ее аргументы .

А приправленная карри функция в Python должна быть похожей на это:

partialAdd= lambda x: lambda y: x + y

plusOne = partialAdd(1)
print(plusOne(3))

4

и в haskell:

plus :: Int -> Int -> Int
plus x y = x + y

plusOne = plus 1

plusOne 4

5

А частичная функция в Python:

def first(ls):
    return ls[0]

print(first([2,4,5]))
print(first([]))

производит

2

print(first([]))
  File "main.py", line 2, in first
    return ls[0]
IndexError: list index out of range

И в Haskell, как Ваш , ссылка обнаружилась:

head [1,2,3]
3

head []
*** Exception: Prelude.head: empty list

Поэтому, что такое общая функция?

ну, в основном противоположное: это - функция, которая будет работать на любой вход того типа. Вот пример в Python:

def addElem(xs, x):
  xs.append(x)
  return xs

и это работает даже на бесконечные списки при использовании небольшого приема:

def infiniList():
    count = 0
    ls = []
    while True:
        yield ls
        count += 1
        ls.append(count)

ls = infiniList()
for i in range(5):
  rs = next(ls)

print(rs, addElem(rs,6))

[1, 2, 3, 4]
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5]

И эквивалент в Haskell:

addElem :: a -> [a] -> [a]
addElem x xs = x : xs

addElem 3 (take 10 [1..])
=> [3,1,2,3,4,5,6,7,8,9,10]

Здесь функции не зависает навсегда. Понятие является тем же: для каждого списка будет работать функция.

16
ответ дан 7 November 2019 в 07:55
поделиться

Частичная функция (и в контексте функционального программирования и в математике) точно, что говорит Wiki: функция, не определенная для всех ее возможных аргументов. В контексте программирования мы обычно интерпретируем "не определенный" как одна из нескольких вещей, включая неопределенное поведение, исключения или незавершение.

примером частичной функции было бы целочисленное деление, которое не определяется, если делитель будет 0 (в Haskell, то это бросит ошибку).

в вышеупомянутом отрывке new_function является частичной функцией.

, Что код просто вызвал бы ошибку в Python, но если бы это работало, поскольку Вы предназначили, это было бы общее количество (значение не неравнодушный) функция.

, Поскольку комментаторы уже указали, Вы, скорее всего, думаете о том, что это было бы , частично применялся функция.

20
ответ дан 7 November 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: