여러 줄에서 ghci로 함수를 정의하는 방법은 무엇입니까?
여러 줄에 걸쳐있는 간단한 함수를 ghci로 정의하려고합니다. 다음을 예로 들어 보겠습니다.
let abs n | n >= 0 = n
| otherwise = -n
지금까지 첫 번째 줄 다음에 Enter 키를 눌러 보았습니다.
Prelude> let abs n | n >= 0 = n
Prelude> | otherwise = -n
<interactive>:1:0: parse error on input `|'
또한 :{
and :}
명령 을 사용하려고 시도했지만 멀리 가지 않았습니다.
Prelude> :{
unknown command ':{'
use :? for help.
Linux에서 Haskell 98 용 GHC Interactive 버전 6.6을 사용하고 있습니다. 무엇을 놓치고 있습니까?
경비원 (예 : 귀하의 예와 같이)을 한 줄에 모두 넣을 수 있으며 작동합니다 (가드는 간격을 신경 쓰지 않습니다)
let abs n | n >= 0 = n | otherwise = -n
인수와 패턴이 일치하는 여러 정의로 함수를 작성하려면 다음과 같이하십시오.
fact 0 = 1
fact n = n * fact (n-1)
그런 다음 정의를 구분하는 세미콜론과 함께 중괄호를 사용합니다
let { fact 0 = 1 ; fact n = n * fact (n-1) }
GHCi는 이제 : set + m으로 활성화 된 멀티 라인 입력 모드를 갖습니다. 예를 들어
Prelude> :set +m
Prelude> let fac 0 = 1
Prelude| fac n = n * fac (n-1)
Prelude|
Prelude> fac 10
3628800
댄은 정확하지만 :{
및 :}
각 자신의 행에 표시해야합니다
> :{
> let foo a b = a +
> b
> :}
> :t foo
foo :: (Num a) => a -> a -> a
이것은 또한 레이아웃 규칙과 상호 작용하므로 do-notation을 사용할 때 중괄호와 세미콜론을 명시 적으로 사용하는 것이 더 쉬울 수 있습니다. 예를 들어이 정의는 실패합니다.
> :{
| let prRev = do
| inp <- getLine
| putStrLn $ reverse inp
| :}
<interactive>:1:18:
The last statement in a 'do' construct must be an expression
그러나 중괄호와 세미콜론이 추가되면 작동합니다.
> :{
| let prRev = do {
| inp <- getLine;
| putStrLn $ reverse inp;
| }
| :}
> :t prRev
prRev :: IO ()
들여 쓰기가 변경 될 수있는 파일에서 정의를 붙여 넣을 때만 중요합니다.
그것은 모양 :{
과 :}
꽤 새로운 기능입니다. GHC를 업그레이드해야 할 수도 있습니다.
편집 : 확인, http://www.haskell.org/ghc/docs/6.8.2/html/users_guide/release-6-8-2.html 참조
:{
and 로만 GHC를 업그레이드하지 않으려면 :}
한 줄에 모두 작성해야합니다.
> let abs' n | n >= 0 = n | otherwise = -n
I'm not aware of any single definition in Haskell that must be written on multiple lines. The above does indeed work in GHCi:
> :t abs'
abs' :: (Num a, Ord a) => a -> a
For other expressions, such as do
blocks, you'll need to use the non-layout syntax with curly braces and semicolons (eugh).
참고URL : https://stackoverflow.com/questions/2846050/how-to-define-a-function-in-ghci-across-multiple-lines
'Programing' 카테고리의 다른 글
Visual Studio 2013에서 단위 테스트를 찾지 못함 (0) | 2020.06.14 |
---|---|
Swift에서 빈 문자열을 확인 하시겠습니까? (0) | 2020.06.14 |
두 개의 인라인 블록, 너비 50 % 요소가 두 번째 줄로 줄 바꿈 (0) | 2020.06.14 |
상대 경로 및 / 또는 파일 이름에서 절대 경로 확인 (0) | 2020.06.14 |
Base64 Java 문자열 인코딩 및 디코딩 (0) | 2020.06.14 |