대답은 모두 설명합니다. 각 언어로 하나의 예를 추가하겠습니다.
def add(x,y):
return x+y
f = add(1)
print(f(3))
f = add(1)
TypeError: add() missing 1 required positional argument: 'y'
이것은 부분 함수도 아니고 카레 함수도 아니며, 모든 인수 를 주지 않은 함수일뿐 입니다.
파이썬에서 커리 된 함수는 다음과 같아야합니다.
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
파이썬의 부분 함수 :
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
총 함수 란 무엇입니까?
글쎄, 기본적으로 반대입니다 : 이것은 해당 유형의 모든 입력에 작동하는 함수입니다. 다음은 파이썬의 예입니다.
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]
여기서 함수는 영원히 멈추지 않습니다. 개념은 동일합니다. 모든 목록에 대해 기능이 작동합니다.