PureScript로 유파를 구현해보십시오.

6439 단어 재료purescript
어느새   Ja 할머니가 묘하게 유행하고 있었기 때문에 어느 쪽이든  Rust 로 구현해 볼까라고 생각하고 싶기 때문에 검색을 걸면 벌써 때문에, 인기가 없을 것 같은 우선 틀림없이 붙이지 않는 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 $ da(b(c(d)))와 같습니다. 전체를 괄호로 묶을 필요가 없기 때문에 편리합니다.

비 Haskeller 에 설명이 필요할 것 같은 부분으로서, let hoge = ...hoge <- ...의 차이는, 우변이 Effect 즉 작용을 가지고 있는지 어떤지입니다.

효과가 없는, 직의 값이라면 = 로 그대로 묶습니다.

작용을 가지면 값 그 자체가 아니라, 「그것에 의해 얻을 수 있는 값을 이렇게 조작한다」라고 하는 순서(액션)로서 기억합니다. 이를 위해 사용하는 것이 <-입니다.
log는 표준 출력으로 String를 흘립니다. <>는 문자열을 결합하는 데 사용되는 연산자입니다. 함수 적용은 연산자보다 우선도가 높기 때문에, 전체를 괄호로 둘러싸는…… 대신$ 연산자를 사용하고 있습니다.

유바바


yubabaStringString를 반환하는 함수입니다. 유파파 함수라는 파워 워드. 그러나, 난수에 의해 결과가 바뀌는…
StringEffect String의 문자 수length를 반환합니다.
String 는 제 1 인수 Int 이상 제 2 인수 randomInt 이하의 정수를 얻습니다……하지만, 난수이므로 작용을 가집니다. 즉 이 함수는 Int 그 자체가 아니고 「Int를 얻는 수단(액션)」Int을 돌려주고 있습니다. 따라서 Int입니다.
Effect Int 는 제 2 인수의 <- 의 제 1 인수 charAt 문자목의 String 를 돌려줍니다.
IntCharsingleton로 변환합니다.
Char 는 조금 설명이 어렵습니다만, 「이 값을 순서(액션) String로서 취급한다」라고 하는 의미를 가집니다. 이 함수는 프로시저(액션)를 반환하기 때문입니다. pure 는 구체적인 값 그 자체가 아니고, 편의상 붙일 수 있었던 식별명 밖에 없기 때문에, 마지막에 순서(액션)를 돌려주지 않으면 안되는 것은 그것은 당연하겠지.

충돌하는 유파



물론 원래 재료처럼 빈 문자열을 주면 충돌합니다. 했어.



이는 일부러 "안전하지 않음"Effect T을 사용하기 때문입니다. 잘 보면 index 라고 쓰여 있지요. PureScript 는 초·안전 지향 언어이므로 제대로 된 프로그램에서는 이런 일은 일어나지 않지만, 그것에 대해 오랫동안 말해도 단순한 홍보가 되어 버리고, 무엇보다 Ja 할머니(?)가 없어져 버려 그래서 할애.

좋은 웹페이지 즐겨찾기