본문으로 건너뛰기
Varlig 가이드
Varlig 홈

나만의 함수

같은 공식을 숫자만 바꿔 가며 계속 입력하고 있다면 함수로 만들어 보세요. 공식과 입력값에 한 번만 이름을 붙이면, 답이 필요한 곳 어디서든 불러 쓸 수 있어요. 팁 계산기, BMI 확인, 저축 예측, 청구서 등에 활용할 수 있어요.

이 페이지에서는 함수를 정의하고 호출하는 방법, 함수가 메모의 다른 이름을 사용하는 방식, 조건과 재귀, 그리고 적용되는 한도를 다뤄요. sqrt, round처럼 Varlig에 기본으로 들어 있는 함수는 내장 함수 참조를 참고하세요.

함수 정의하고 호출하기

함수 이름, 괄호 안에 매개변수, 등호, 공식을 차례로 쓰세요. 그런 다음 같은 순서로 값을 넣어 호출하세요.

calc
팁(금액, 비율) = 금액 * 비율
($48, 15%) 결과 $7.20
($120, 12.5%) 결과 $15.00
($36 + $12, 15%) 결과 $7.20

정의하는 줄에는 결과가 표시되지 않아요. 호출할 때마다 금액비율 자리에 넣은 값으로 공식을 계산해요. 위의 $36 + $12처럼 인수로 계산식 전체를 넣을 수도 있어요.

인수는 숫자만이 아니라 완전한 값이므로 단위와 통화도 공식 안에서 그대로 유지돼요.

calc
bmi(몸무게, 키) = 몸무게 / ^2
bmi(81 kg, 1.8 m) 결과 25 kg/m²

단위는 넣은 그대로 유지되므로 bmi(81 kg, 180 cm)는 kg/cm² 단위로 답해요. 무엇을 넣든 같은 단위로 받으려면 함수 안에서 변환하세요.

calc
bmi(몸무게, 키) = (몸무게 / ^2) in kg/m^2
bmi(81 kg, 180 cm) 결과 25 kg/m²
bmi(80 kg, 5.9 ft) 결과 24.7375131668 kg/m²

매개변수가 없는 함수도 만들 수 있어요. 정의할 때와 호출할 때 모두 빈 괄호를 쓰세요.

calc
표준_부가세() = 20%
£120 * 표준_부가세() 결과 £24.00

대개는 표준_부가세 = 20% 같은 일반 변수로 더 적게 입력해서 같은 일을 할 수 있어요.

이름과 매개변수

  • 함수와 매개변수 이름은 한 단어여야 해요. 세후_급여bmi2처럼 글자, 숫자, 밑줄을 쓰고, 공백은 넣지 마세요. 원의 넓이(r) = pi * r^2라고 쓰면 그 줄에서 대신 쓸 이름인 원의_넓이를 제안해요.
  • 함수 이름은 대소문자를 구분하지 않아요. Tip(bill, pct)를 정의한 뒤 tip($48, 15%)로 호출할 수 있어요.
  • 매개변수마다 서로 다른 이름이 필요해요. f(a, a) = a는 오류예요.
  • 함수에는 매개변수를 최대 32개까지 둘 수 있어요.
  • 내장 함수의 이름은 다시 쓸 수 없어요. round(x) = …sqrt(x) = …는 내장 함수를 대체하지 않고 오류를 표시해요. 일반 변수에는 floor = 12 m²처럼 이런 이름을 여전히 쓸 수 있어요. 이름을 참고하세요.
  • 스프레드시트식 이름인 avg, total, stdev는 자유롭게 쓸 수 있어요. total(주문)을 직접 정의하면 내가 만든 함수가 실행돼요.
  • 함수와 변수는 같은 이름을 함께 쓸 수 있어요. 요율은 변수를 읽고, 요율(5)는 함수를 호출해요.
  • 함수는 항상 괄호를 붙여 호출하세요. 같은 이름의 변수가 없을 때 함수 이름만 쓰면 오류가 표시돼요.

인수 안의 쉼표

쉼표 뒤에 공백이 오면 인수를 구분하고, 쉼표 뒤에 정확히 세 자리 숫자가 오면 천 단위를 구분하므로 금액을 평소 쓰던 대로 쓸 수 있어요.

calc
팁(금액, 비율) = 금액 * 비율
($1,200, 15%) 결과 $180.00
($1200,15%) 결과 $180.00

두 번째 호출처럼 공백으로 나눈 값보다 함수에 필요한 값이 많으면 쉼표마다 값이 나뉘어요. 소수에는 팁($48, 12.5%)처럼 소수점을 사용하세요.

메모의 다른 이름 사용하기

함수는 메모에 있는 변수를 사용할 수 있어요. 호출할 때마다 그 변수의 현재 값을 읽어요.

calc
부가세 = 20%
부가세_포함(가격) = 가격 * (1 + 부가세)
부가세_포함(£50) 결과 £60.00
부가세 = 5%
부가세_포함(£50) 결과 £52.50

함수를 정의할 때 그 변수가 이미 있어야 하므로 부가세 = 20%부가세_포함보다 위에 두세요. 변수가 아직 없으면 정의하는 줄에 오류가 표시돼요.

매개변수는 함수 안에서만 쓰여요. 가격이라는 매개변수는 메모의 다른 곳에 있는 가격 변수를 읽거나 바꾸지 않아요.

calc
가격 = £10
두_배(가격) = 가격 * 2
두_배(£3) 결과 £6.00
가격 결과 £10.00

변수와 마찬가지로 한 계산 블록에서 정의한 함수는 같은 메모의 뒤쪽 계산 블록에서도 쓸 수 있어요. Varlig는 메모를 위에서 아래로 계산하므로, 함수를 처음 호출하는 줄보다 위에 정의하세요. 정의보다 위에 있는 호출에는 결과가 표시되지 않아요.

다른 함수를 호출하는 함수

작은 함수를 서로 조합해 쌓아 올릴 수 있어요.

calc
일당 = £400
보수(일수) = 일수 * 일당
청구액(일수) = 보수(일수) * 1.2
청구액(5) 결과 £2,400.00

함수는 정의할 때 있던 보조 함수의 버전을 기억해요. 같은 보조 함수를 아래쪽에서 다시 정의해도, 먼저 정의한 함수는 예전 버전을 계속 사용해요.

calc
배송비(주문) = £4.95
합계(주문) = 주문 + 배송비(주문)
배송비(주문) = £2.95
합계(£30) 결과 £34.95
배송비(£30) 결과 £2.95

배송비를 반영하려면 그 아래에서 합계를 다시 정의하세요. 정의를 그 자리에서 수정할 때는 이런 일이 생기지 않아요. Varlig가 메모를 처음부터 다시 계산하므로 그 아래의 모든 줄이 수정한 버전을 사용해요.

함수는 아래쪽에서 정의하는 보조 함수를 호출할 수도 있어요. 이때는 호출하는 시점의 보조 함수를 사용하므로, 바깥 함수를 호출할 때까지는 보조 함수가 정의되어 있어야 해요.

calc
결제(주문) = 주문 + 배달비(주문)
배달비(주문) = if 주문 >= £40 then £0 else £3.50
결제(£25) 결과 £28.50
결제(£60) 결과 £60.00

조건

if … then … else …로 결과 중 하나를 고를 수 있어요. 경우가 세 가지 이상이면 else 뒤에 if를 하나 더 이어 쓰세요.

calc
우편요금(무게) = if 무게 <= 100 g then £0.85 else if 무게 <= 750 g then £1.55 else £3.20
우편요금(90 g) 결과 £0.85
우편요금(500 g) 결과 £1.55
우편요금(1.2 kg) 결과 £3.20

해당하는 분기만 계산하므로, 0으로 나누기처럼 그대로 두면 실패할 계산을 미리 막을 수 있어요.

calc
인당_금액(총액, 인원) = if 인원 > 0 then 총액 / 인원 else £0
인당_금액(£90, 3) 결과 £30.00
인당_금액(£90, 0) 결과 £0.00

재귀

함수는 결국 조건에 따라 멈추기만 하면 자기 자신을 호출할 수 있어요. 아래 함수는 모임의 모든 사람이 서로 한 번씩 악수할 때 악수 횟수를 세요.

calc
악수(인원) = if 인원 <= 1 then 0 else (인원 - 1) + 악수(인원 - 1)
악수(6) 결과 15
악수(10) 결과 45

호출할 때마다 한 단계씩 깊어지며, 중첩 호출은 최대 16번까지 허용돼요. 악수(16)은 작동하지만 악수(17)Error: calculation limit을 표시해요. 멈추는 경우에 절대 도달하지 않는 함수도 정의할 때는 받아들여지지만, 호출하면 같은 한도에 걸려요. 두 함수가 서로를 호출할 수도 있으며, 같은 한도가 적용돼요.

일상적인 경우의 수 계산에는 내장 함수가 더 빠르고 이런 한도도 없어요. combination(10, 2)45를 돌려주고, 대표적인 재귀 예제인 팩토리얼은 factorial(n)이나 n!로 계산할 수 있어요.

목록, 행렬 등

인수로 목록, 행렬, 복소수를 넣을 수 있고, 함수 본문에서는 어떤 내장 함수든 쓸 수 있어요.

calc
범위(점수) = max(점수) - min(점수)
범위([12, 18, 9, 21]) 결과 12

본문에는 자체 지역 변수를 쓰는 합이나 방정식 풀이도 넣을 수 있어요. 목록과 통계합, 방정식 풀이, 미적분을 참고하세요.

주의할 점

  • 거듭제곱은 ^로 쓰세요. 함수 안에서는 를 받지 않아요. 게다가 짧은 매개변수 이름은 단위와 겹칠 수 있어요. w / h²에서 는 매개변수 h가 아니라 제곱시간을 뜻해요. w / h^2로 쓰세요.
  • 인수 개수를 확인하세요. 값 두 개를 받는 함수를 팁($48)처럼 호출하면 오류가 표시돼요.
  • 한 줄에 공식 하나. 정의는 한 줄에 쓰는 식 하나예요. 여러 단계로 이루어진 계산이라면 단계마다 작은 함수를 정의하고 조합하세요.
  • 잘못된 재정의는 예전 버전을 유지해요. 을 새로 정의한 줄에 실수가 있으면 그 줄에 오류가 표시되고, 이전에 제대로 작동하던 을 계속 쓸 수 있어요.
  • 메모를 다시 계산하면 결과가 바뀔 수 있어요. 호출은 매번 다시 계산되므로 random이나 오늘 날짜를 쓰는 함수는 새로운 결과를 낼 수 있어요.
  • 오류는 그대로 전달돼요. 0으로 나누기처럼 인수 때문에 공식이 실패하면 호출한 줄에 그 오류가 표시돼요.

한도

항목 한도
함수당 매개변수 32
중첩 호출(함수가 자신이나 다른 함수를 호출) 16
최상위 호출 하나를 계산하는 동안의 호출 횟수 16,384
메모 하나에 정의된 함수 1,024

한도에 걸리면 Error: calculation limit이 표시돼요. 메모의 나머지 부분은 계속 작동해요. 모든 한도는 오류, 진단, 한계를 참고하세요.

종합해 보기

프리랜서 청구서예요. 일당과 부가세는 맨 위에 이름을 붙인 값으로 두고, 작은 함수 세 개가 계산을 맡아요.

calc
# 3월 청구서
일당 = £450
부가세 = 20%
보수(일수) = 일수 * 일당
부가세_포함(금액) = 금액 * (1 + 부가세)
연체료(금액, 연체일) = if 연체일 > 30 then 금액 * 2% else £0
디자인 = 보수(8) 결과 £3,600.00
개발 = 보수(4.5) 결과 £2,025.00
소계 = 디자인 + 개발 결과 £5,625.00
부가세_포함(소계) 결과 £6,750.00
연체료(부가세_포함(소계), 45) 결과 £135.00

일당이나 부가세를 바꾸면 그 아래의 모든 줄이 업데이트돼요. 고객이 늦게 지불하면 호출 한 번으로 연체료를 더할 수 있어요.