PureScript로 유파를 구현해보십시오.
6439 단어 재료purescript
덧붙여 PureScript 로 표준 입력을 실현하는 것은 조금 번거롭기 때문에, 코드에 직접 쓰기로 하고 있습니다. 죄송합니다. 방법은 여기 .
하지만 대신에 Try PureScript! 에 붙여 실행할 수 있으므로 환경 구축이나 하지 않아도 놀 수 있어.
코드
module Main where
import Prelude
import Data.String.CodePoints (length)
import Data.String.CodeUnits (singleton)
import Data.String.Unsafe (charAt)
import Effect (Effect)
import Effect.Console (log)
import Effect.Random (randomInt)
yubaba :: String -> Effect String
yubaba name = do
let nameLen = length name
index <- randomInt 0 (nameLen - 1)
pure $ singleton $ charAt index name
main :: Effect Unit
main = do
log "契約書だよ。そこに名前を書きな。"
-- 契約書
let name = "千尋"
log $ "フン。" <> name <> "というのかい。贅沢な名だねぇ。"
newName <- yubaba name
log $ "今からお前の名前は" <> newName <> "だ。いいかい、" <> newName <> "だよ。分かったら返事をするんだ、" <> newName <> "!!"
실행 결과
해설
main
main
에 관해서는 보았습니다. PureScript 의 지식이 없어도 왠지 알 수 있다고 생각합니다. PureScript 에서는 함수는 인수를 괄호로 묶어 줄 필요는 없고, 옆에 쓰는 것만으로 OK 입니다. 사이에 $
는 함수 적용 연산자이고 a $ b $ c $ d
는 a(b(c(d)))
와 같습니다. 전체를 괄호로 묶을 필요가 없기 때문에 편리합니다.비 Haskeller 에 설명이 필요할 것 같은 부분으로서,
let hoge = ...
와 hoge <- ...
의 차이는, 우변이 Effect
즉 작용을 가지고 있는지 어떤지입니다.효과가 없는, 직의 값이라면
=
로 그대로 묶습니다.작용을 가지면 값 그 자체가 아니라, 「그것에 의해 얻을 수 있는 값을 이렇게 조작한다」라고 하는 순서(액션)로서 기억합니다. 이를 위해 사용하는 것이
<-
입니다.log
는 표준 출력으로 String
를 흘립니다. <>
는 문자열을 결합하는 데 사용되는 연산자입니다. 함수 적용은 연산자보다 우선도가 높기 때문에, 전체를 괄호로 둘러싸는…… 대신$
연산자를 사용하고 있습니다.유바바
yubaba
는 String
를 String
를 반환하는 함수입니다. 유파파 함수라는 파워 워드. 그러나, 난수에 의해 결과가 바뀌는…String
는 Effect String
의 문자 수length
를 반환합니다.String
는 제 1 인수 Int
이상 제 2 인수 randomInt
이하의 정수를 얻습니다……하지만, 난수이므로 작용을 가집니다. 즉 이 함수는 Int
그 자체가 아니고 「Int
를 얻는 수단(액션)」Int
을 돌려주고 있습니다. 따라서 Int
입니다.Effect Int
는 제 2 인수의 <-
의 제 1 인수 charAt
문자목의 String
를 돌려줍니다.Int
는 Char
를 singleton
로 변환합니다.Char
는 조금 설명이 어렵습니다만, 「이 값을 순서(액션) String
로서 취급한다」라고 하는 의미를 가집니다. 이 함수는 프로시저(액션)를 반환하기 때문입니다. pure
는 구체적인 값 그 자체가 아니고, 편의상 붙일 수 있었던 식별명 밖에 없기 때문에, 마지막에 순서(액션)를 돌려주지 않으면 안되는 것은 그것은 당연하겠지.충돌하는 유파
물론 원래 재료처럼 빈 문자열을 주면 충돌합니다. 했어.
이는 일부러 "안전하지 않음"
Effect T
을 사용하기 때문입니다. 잘 보면 index
라고 쓰여 있지요. PureScript 는 초·안전 지향 언어이므로 제대로 된 프로그램에서는 이런 일은 일어나지 않지만, 그것에 대해 오랫동안 말해도 단순한 홍보가 되어 버리고, 무엇보다 Ja 할머니(?)가 없어져 버려 그래서 할애.
Reference
이 문제에 관하여(PureScript로 유파를 구현해보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/BlueRayi/items/86bfa691624efc9c37c0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)