대입(배정) 연산자로서의 ->
글쓴이: cppig1995 / 작성시간: 화, 2008/08/05 - 11:14오후
대입(배정) 연산자로 ->를 사용하면 상당히 좋을 것 같은데요.
무엇보다, 비교 연산자와 혼동이 되지 않고, i+1->i라는 표현식이 확실히 "i에 1을 더해 다시 i에 넣는다"가 됩니다.
(초보자들이 i=i+1이라는 표현식을 처음 보면 혼동하게 되죠.)
제가 스크립팅 언어를 설계하면 대입(배정) 연산자로 ->를 사용하고 변수 선언에도 이 형식을 사용할 것 같아요.
(특히, 한글로 설계해야 하면, 한글 어순에는 ->이 더 잘 맞지 않나요?)
반복 1->횟수 10까지 { "871016\n" 출력 }
* CASIO fx-5800P를 샀는데, 여기서 FOR 1->I TO 10:반복본문:NEXT 형식을 쓰더군요.
초기값->변수명
초기값->전역 변수명
(반복, 까지, 전역은 키워드입니다. 출력은 함수명.)
왜 =를 사용하는 걸까요? ALGOL에서 사용했기 때문인가요?
※ 내용추가: 이유 하나 찾았습니다.
함수가 일등급값인 언어에서, 인터프리터가f = function () { f() }
라면 f가 식별자인 것을 인지할 수 있지만,function () { f() } -> f
라면 좀 힘들겠군요. (꼭 함수가 아니더라도) 하지만 Lua에서도 대입은 =로 하고 함수가 일등급값인데local f; f = function () { f() }
와 같이 써 주어야 하죠. (틀렸으면 지적 부탁드려요.)
Forums:
지금 떠오른 것들 몇개
R에서는
Erlang에서는
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
Haskell 에선
Haskell 에선 <- 를 쓴다고 볼 수 있죠. 대입만을 위한 연산자가 아니라
좀더 일반적인 모나드라는 프레임워크에서 대입을 다룰 수 있습니다.
리스트 조건제시법에서도 마찬가지로 얼랑과 마찬가지로 <- 를 쓰는데,
얼랑을 비롯하여 요즘 여러 언어에서 도입하고 있는 리스트 조건제시법은
하스켈에서 따온 것입니다. 물론 하스켈의 전신이라 할 수 있는 미란다나
고퍼에서부터 있었던 표현입니다.
M.W.Park 님께서 R 에 대한 이야기를 하셔서 링크합니다만
R 언어의 설계가 프로그래밍 언어적 관점에서 어떤 점이 문제가 있고
어떻게 개선해 나가야 할지 연구하는 우리나라에서 연구하는 분이 계시더군요.
http://www.postech.ac.kr/~gla/
여기에 가면 A critique of R 이라는 PPT 슬라이드가 있습니다.
임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
좋은 슬라이드 소개
좋은 슬라이드 소개 시켜 주셔서 감사합니다. 요즘 고민하고 있던 프로그래밍 언어에 대한 의문점을 좀 더 명확하게 만들어 주는군요 :)
좋은 사례 소개
좋은 사례 소개 감사드립니다. 예로 들어주신 것들은 모두 functional languages라고 알고 있습니다.
그렇다면 주로 ALGOL에서 파생되었기 때문에 구조적 언어들에 없는 건가요?
--
임수서룬뫼 윤희수 {cppig1995/돼지군}
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
제가 알기로 파스칼
제가 알기로 파스칼 대입 연산자가 아마 := 일겁니다 :)
Pascal은 실제로 써본
Pascal은 실제로 써본 적이 있고(Objective Pascal이 아닌 Turbo Pascal을 말합니다.) 알고 있습니다.
제가 논의하고자 하는 것은 대입의 "대상"이 우변에 있는 형태를 말합니다.
--
임수서룬뫼 윤희수 {cppig1995/돼지군}
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
a -> 3 은 어떤가요?
Python 2차 세미나였던가?
이강성씨의 발표에서 이 모양을 보고 충격을 받았던 것으로 기억합니다.
물론 Python이 이렇게 쓴다는게 아니라 Python은 모든게 객체라면서 이런 표기를 쓰더군요.
즉 일반적인 변수 대입인
a = 3 이 의미하는 바는 a <- 3 인데
객체지향언어인 Python은
a = 3 이 의미하는 바가 a -> 3 이라나?
그때는 상당히 혼란을 느꼈었는데 지금은 상당히 재미있는 형태라고 생각합니다.
참조 혹은 pointer를 이해하는 방식을 밑의 형태로 하면 더 혼란스러울까요?
이해하기 좋을까요?
이중연결목록을 배울 때 RLINK LLINK 하면서 배웠는데 이것들이 변화하는 과정을
code로 작성할 때 정말 헷갈렸던 것으로 기억합니다.
그러니까
a -> b -> c 의 이중연결목록에서
b를 제거할 때
a.rlink = b.rlink
c.llink = b.llink
free(b)
로 쓸 수 있는데요.
대입문은 통상 우측에서 좌측으로 값이 들어간다는 생각을 하는데
실제 이중연결목록을 그림으로 그리면 화살표를 사용해서 link가 가리키는 방향으로 뻗어나가는 형태가 됩니다.
참조나 pointer는 좌측의 참조나 pointer가 우측의 객체를 가리킨다는 은유가 쓰이죠.
즉 이 두가지 은유는 의미는 같지만 방향성은 반대로 되고 있습니다.
밑의 표기형태를 썼으면 이해가 쉽지 않았을까라는 생각을 합니다.
참조만을 쓰는 객체지향언어나 모든게 값인 함수형 언어에서는 이런 혼란은 없을 듯.