Object C에 Block(Closure)가 추가된다!!!

맥(Mac OS X) 2009. 6. 12. 10:24
음.. Snow Leopard(Mac OS X 10.6)에서 부터 루비, 파이썬 또는 C#(3.0 이상)에서 구현되는 Function Block, 또는 Closer.. 언어에 따라 개념이 약간 식은 다를 수 있지만, 어째튼 이게 된다고 하네요. 사용방법은,

I = [I  map:^(id obj) { return [obj uppercaseString]; }];
I = [I  filter:^(id obj) { return [obj hasprefix:@"a"]; }];

또는 바로 C언어에서도,

void EvalFuncOnGrid( float(^block)(float) ) {
    int i;
    for ( i = 0; i < 5 ; ++i ) {
        float x = i * 0.1;
        printf("%f %f", x, block(x));
    }
}

void Caller(void) {
    float forceConst = 3.445;
    EvalFuncOnGrid(^(float x){ return 0.5 * forceConst * x * x; });
}

void main(void) {
   Caller();
}

참고 블러그 => http://www.macresearch.org/cocoa-scientists-part-xxvii-getting-closure-objective-c 아이폰에서도 곧 이런 프로그래밍이 가능해지겠네요. ㅋ

설정

트랙백

댓글

Graph Theory(1), 과거로의 여행

Graph Theory 2009. 6. 2. 20:25
A Direct Graph Direct Graph는 G = ( V X E) 로 표현되며, 유한한 vertex 집합과, 유한한 edge들의 집합을 가지며, edge는 source Vertex와 target vertex를 포함한다. 전반적인 vertex 와 edge의 그림은 다음을 참조한다. Open Source인 QuickGraph를 참조로 하여, 코드로 표현해 본다.
public interface IEdge 
{
    TVertex Source {get;}
    TVertex Target { get;}
}
인터페이스 IEdge는 정의대로 Generic으로 선언된 Source Vertex와 Target Vertex를 갇는다.
 e = (u, v)에서 edge e는 Vertex u의 out-edge이고, v의 in-edge이다. 
in-degree(v) 는 incoming edge의 수를 가리킨다. (들어오는 edge) 
out-degree(u) 는 outcoming edge의 수를 가리킨다 (나가는 edge) 
하나의 그래프는 u와 v가 같은 vertex pair로 부터의 multi edge를 허락하며, multi-graph라 한다. 
하나의 path는 연속으로 이어진 edge e1e2....en의 집합이며, 각각의 edge들은 부모 자식 관계가 성립된다. 
하나의 Cycle은 시작 vertex와 끝 vertex가 같은 하나의 path이다. 
하나의 directed acyclic graph는 cycle이 없는 directed graph이다. 
하나의 Weighted directed graph는 각 vertex간에 특정한 값(예를 들어 거리)가 존재하는 directed graph이다. 
하나의 adjacency graph는 direct graph를 표현한 데이타 구조이며, out-edge 만으로 어떤 vertex로 접근하며, adjacency matrix를 만들 수 있다. 
bidirectional graph는 direct graph를 표현한 데이타 구조이며, in-edge,out-edge 둘다 어떤 vertex로 접근할수 있다. 추가.. 

(Object C로 edge 구현)
#import 
#import "Vertex.h"

@interface Edge : NSObject {
	Vertex *source;
	Vertex *target;
}

@property (readonly, retain) Vertex *source;
@property (readonly, retain) Vertex *target;

@end

그리고 implementation은 다음과 같다. Object C 2.0의 Property를 사용한다.
#import "Edge.h"

@implementation Edge

@synthesize source;
@synthesize target;

@end

설정

트랙백

댓글

TortoiseSVN에서 .SVN을 삭제하기

카테고리 없음 2009. 5. 28. 09:41

TortoiseSvn을 사용해서 소스관리를 하다 보면, 가끔 작업하고 있는 소스 폴더를 처음으로 초기화 하고, 다시 import 할 필요가 있습니다. 보통 초기화해주기 위해서 SVN의 경우 hidden file인 .SVN을 삭제하면 되는데요, TortoiseSVN에는 이 메뉴가 없지요. 또한 Command Tool을 사용해서 소스 폴더로 들어가 봐도 .SVN파일이 보이지 않습니다. 이런 경우에는 간단히 소스폴더에서 Contextual 창에 나타나는 Export 메뉴를 선택해서 초기화하고 싶은 현재 소스 폴더를 다시 선택해주면, .SVN 의 삭제 여부를 묻는 창이 나타난답니다. 그러면 “YES” 를 눌러주고, 간단히 작업 끝입니다. ㅋㅋㅋ

설정

트랙백

댓글