vital.vim의 Data.List에 람다 식을 전달할 수 있습니다!
요약
이 PR 에 의해,
Vim script의 준 표준 라이브러리 인 vital.vim의 Data.List 모듈에서,
Funcref (람다 식 및 함수 참조)를 사용할 수 있습니다!
Vim script로 Functional Programming을 즐기자!
let s:L = vital#vital#new().import('Data.List')
let xs = range(0, 50)
let xs = s:L.map(xs, { x ->
\ (x % 5 == 0) && (x % 3 == 0) ? 'FizzBuzz'
\ : (x % 5 == 0) ? 'Fizz'
\ : (x % 3 == 0) ? 'Buzz'
\ : string(x)
\ })
function! s:p(x) abort
return a:x ==# 'Fizz'
endfunction
let xs = s:L.filter(xs, function('s:p'))
echo s:L.all(function('s:p'), xs)
" 1
배경
Vim8.0에서 람다식이 지원되었으므로,
Data.List가 Funcref에 해당해야 했습니다.
이 PR 이전에는 아래와 같이,
표현식을 나타내는 문자열만 전달할 수 있었습니다.
이것은 Vim script의 전통적인 방법입니다.
let s:L = vital#vital#new().import('Data.List')
echo s:L.map(range(0, 9), 'v:val + 1')
" [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
이번 추가로
아래와 같이,
Funcref (람다 식, 함수 참조)를 사용할 수 있습니다!
let s:L = vital#vital#new().import('Data.List')
function! s:succ(x) abort
return a:x + 1
endfunction
" ラムダ式
let Succ = { x -> x + 1 }
" 関数参照
let Succ_ = function('s:succ')
let xs = range(0, 9)
echo s:L.map(xs, Succ) == s:L.map(xs, Succ_)
" 1
Vim script의 오래된 전통과 함께
덤
Data.List.Closure
vital.vim에는,
Vim8.0 이전의 Vim에서도 함수 부분 적용을 위한 Data.Closure 모듈이 있습니다.
이번 PR에서는
Data.Closure 개체에서 Data.List의 각 함수를 사용하는 Data.List.Closure 모듈도 추가되었습니다.
let s:V = vital#vital#new()
let s:C = s:V.import('Data.Closure')
let s:CL = s:V.import('Data.List.Closure')
function! s:plus(x, y) abort
return a:x + a:y
endfunction
let plus = s:C.from_funcref(function('s:plus'), [10])
let xs = range(0, 9)
echo s:CL.map(xs, plus)
" [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Data.List.Closure는 성능에 어려움이 있기 때문에,
Data.List내의 직접 대응은 배웅되었습니다.
그래서 기본적으로,
Vim8.0에서 추가된 클로저 함수(람다 식)
또는 함수 함수를 통한 부분 적용
와 함께 Data.List를 사용하는 것이 좋습니다.
이상
Vim script로 Functional Programming을 즐기자!
Data.Optional과 Data.Either도 있습니다!
@밀리
실은 본 PR은 도중에 「Vim 7.4만으로 Vim script의 퍼스 에러가 일어난다」라고 하는 문제를 우연히 만나고 있어,
하루카는 하루카에 의해 방치되어 버렸습니다.
거기서 그 대응을 해 주신 것이 Milly씨였습니다.
고마워요!
유용한 페이지
let s:L = vital#vital#new().import('Data.List')
echo s:L.map(range(0, 9), 'v:val + 1')
" [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
아래와 같이,
Funcref (람다 식, 함수 참조)를 사용할 수 있습니다!
let s:L = vital#vital#new().import('Data.List')
function! s:succ(x) abort
return a:x + 1
endfunction
" ラムダ式
let Succ = { x -> x + 1 }
" 関数参照
let Succ_ = function('s:succ')
let xs = range(0, 9)
echo s:L.map(xs, Succ) == s:L.map(xs, Succ_)
" 1
Vim script의 오래된 전통과 함께
덤
Data.List.Closure
vital.vim에는,
Vim8.0 이전의 Vim에서도 함수 부분 적용을 위한 Data.Closure 모듈이 있습니다.
이번 PR에서는
Data.Closure 개체에서 Data.List의 각 함수를 사용하는 Data.List.Closure 모듈도 추가되었습니다.
let s:V = vital#vital#new()
let s:C = s:V.import('Data.Closure')
let s:CL = s:V.import('Data.List.Closure')
function! s:plus(x, y) abort
return a:x + a:y
endfunction
let plus = s:C.from_funcref(function('s:plus'), [10])
let xs = range(0, 9)
echo s:CL.map(xs, plus)
" [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Data.List.Closure는 성능에 어려움이 있기 때문에,
Data.List내의 직접 대응은 배웅되었습니다.
그래서 기본적으로,
Vim8.0에서 추가된 클로저 함수(람다 식)
또는 함수 함수를 통한 부분 적용
와 함께 Data.List를 사용하는 것이 좋습니다.
이상
Vim script로 Functional Programming을 즐기자!
Data.Optional과 Data.Either도 있습니다!
@밀리
실은 본 PR은 도중에 「Vim 7.4만으로 Vim script의 퍼스 에러가 일어난다」라고 하는 문제를 우연히 만나고 있어,
하루카는 하루카에 의해 방치되어 버렸습니다.
거기서 그 대응을 해 주신 것이 Milly씨였습니다.
고마워요!
유용한 페이지
let s:V = vital#vital#new()
let s:C = s:V.import('Data.Closure')
let s:CL = s:V.import('Data.List.Closure')
function! s:plus(x, y) abort
return a:x + a:y
endfunction
let plus = s:C.from_funcref(function('s:plus'), [10])
let xs = range(0, 9)
echo s:CL.map(xs, plus)
" [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
Vim script로 Functional Programming을 즐기자!
Data.Optional과 Data.Either도 있습니다!
@밀리
실은 본 PR은 도중에 「Vim 7.4만으로 Vim script의 퍼스 에러가 일어난다」라고 하는 문제를 우연히 만나고 있어,
하루카는 하루카에 의해 방치되어 버렸습니다.
거기서 그 대응을 해 주신 것이 Milly씨였습니다.
고마워요!
유용한 페이지
Reference
이 문제에 관하여(vital.vim의 Data.List에 람다 식을 전달할 수 있습니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aiya000/items/9e2c74250b282d339268텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)