2017-01-20 8 views
0

우리는 현재 완전히 이해하지 못하는 대학의 과제에 참여하고 있습니다 (해결책은 없지만 아이디어 나 제안 만하십시오). 우리가이 문자열과 다음 기능 (유형) 및 소요 기능을 가질 수 있도록 노력하고있다 이제하스켈 - 함수 호출 함수가 있습니다

type MyType = String -> String 

함수 (유형)를 제공

:

은 무엇 부여하는 유형입니다

myCode :: String -> String -> MyType -> MyType 

우리는 이미합니다 MyType 하나로 사용할 수있는 기능을 구현 :

emptyString :: MyType 
emptyString :: (\a -> "") 

조교를 sk는 여러 개의 2x 문자열을 저장할 수 있습니다. 우리가 "안녕하세요"입니다 입력 문자열, 우리가 "emptyString"에 넣어 C로 다음 "세계"이고 다른 하나가이 경우에

myCode :: String -> String -> MyType ->MyType 
myCode a b c = (\x -> b) 

: 이것은 우리의 현재 생각입니다.

a = (myCode "Hello" "World" emptyString) "" 

우리가 "A"입력에 "세계"를 얻을 : 우리는 콘솔에 다음을 입력 할 때 때문에 이것은 하나 개의 문자열에 적용됩니다. 이제 어려운 부분 : 우리는 이들 중 몇 가지를 저장할 수 있어야합니다 (검색은 다른 작업이며 지금은 필요하지 않습니다). 우리는 다른 변수를 선언 할 때 우리는 "A"지금 사용할 수 있습니다 생각 :

b = (myCode "1" "2" a) "Hello" "World" emptyString "") 

이 "B", "A"와이 내 "emptyString"로 저장 기능에 부를 것이다. 짐작할 수 있듯이 작동하지 않습니다! 그리고 우리는 지금부터 어떻게 계속할 것인가에 대한 손실이 있습니다.

이 부분에 도달하면 작업에 대한 복잡한 설명을 이해하는 데 시간이 걸렸음을 의미합니다.

미리 감사드립니다.

+1

"상점"이란 무엇입니까?"2x 문자열"이란 무엇입니까? –

+2

이것은 '전화 번호부'운동의 난독 화입니까? –

+1

최근 질문과 동일한 과제로 보입니다. http://stackoverflow.com/questions/41753366/identifying-input-values-for-which-function-does-not-generate-a-specific-outpu – amalloy

답변

1

의견에서 amalloy가 링크 한 질문에서 패러다임과 같은 연속 전달 스타일을 기반으로 전화 번호부를 작성하는 것처럼 보입니다.

기본적으로, 무엇을

myCode :: String -> String -> MyType -> MyType 

당신이 유형 MyType이다 데이터 dat = myCode a b pb의 조각을 생성하는 것입니다 귀하의 종류에 일어날 예정이다. 따라서 dats :: String으로 쿼리하면 String이 출력됩니다. dat s의 작동, 당신은

dat s = myCode a b pb s 

는 세 개의 문자열, a, b, 그리고 어떤 pb s 반환에 액세스 할 수있는, 정의로 확장합니다. a bs을 사용하여 무언가를 수행하거나 pb으로 도로를 밀어서 계속 처리하도록하여 기능을 재귀 적으로 빌드합니다.

너무 멀리주지 않고 도움이되기를 바랍니다.

+0

작업을 쉽게 추측 할 수 있습니다 - 일반적인 것이어야합니다 :) 도움을 주셔서 대단히 감사합니다. – Fapprentice