Nim에서도 튀김을 먹었다.
이 기사에 대하여
이 주제, 정말 초학자에게는 딱 좋네요.
함수형 프로그래밍은 우선 생각에서 이해하자
튀긴 튀김을 보았다.
최근 Nim을 배우고 있기 때문에, Nim판 써 보았습니다.
완전히 잊었습니다만, 전에 PHP에서도 하고 있었습니다.
PHP에서도 튀긴 꼬집어 보았다 - Qiita
환경
구현
별로 함수형 패러다임은 의식하지 않습니다만, 일일이하는 의식했습니다.
- var 를 사용하지 않는다(재대입, 파괴적 변경 없음)
- for 사용하지 않음 (map 사용)
별로 상관없습니다만, Bento 는 오브젝트의 레퍼런스로 해, 순서에 주소를 갖게 하는 것으로, 주소에 의한 비교를 할 수 있었던 것이 락이었습니다.
import strutils, sequtils, algorithm
type BentoObj = object
dish: string
num: int
type Bento = ref BentoObj
proc `$`(bento: Bento): string =
"$1 $2個" % [bento.dish, $bento.num]
proc max(bentos: seq[Bento]): Bento =
let sorted = bentos.sorted(proc (a, b: Bento): int = b.num - a.num)
sorted[0]
proc snitchOne(bentos: seq[Bento]): seq[Bento] =
let max: Bento = max(bentos)
bentos.map(proc (b: Bento): Bento =
if (b == max):
Bento(dish: b.dish, num: b.num - 1)
else:
b
)
proc snitch(num: int, bentos: seq[Bento]): seq[seq[Bento]] =
result = @[bentos]
if (num > 0):
result.add(snitch(num - 1, snitchOne(bentos)))
proc main() =
let bentos: seq[Bento] = @[
Bento(dish: "唐揚げ", num: 10),
Bento(dish: "唐揚げ", num: 8),
Bento(dish: "唐揚げ", num: 6)
]
let snitchedBentos = snitch(5, bentos)
echo snitchedBentos
when isMainModule:
main()
재미있었습니다
더 좋은 글이 있습니다.
Reference
이 문제에 관하여(Nim에서도 튀김을 먹었다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nunulk/items/2857bc068418d32d7687텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)