2016-06-09 1 views
1

많은 객체 인식 스크립팅 언어는 객체가 주어진 튜플 또는 유형의 인스턴스 생성 여부를 테스트하는 연산자 또는 함수를 가지고 있습니다. 자바 스크립트가 instanceof 연산자를 가지고, 파이썬은 isinstance 내장뿐만 아니라 issubclass 내장 등이있다 왜 '인스턴스'단어가 없습니까?

그러나 팩터에 모든 튜플 클래스와 객체 유형이 자신의 instance? 단어 주어진다

:

TUPLE: car speed ; 
! autogenerated is the word car?, which tests if something is a car 
TUPLE: boat weight ; 
! autogenerated is the word boat?, which tests if something is a boat 
100 boat boa boat? ! -> t 
100 boat boa car? ! -> f 

보트가를 보트와 자동차는 자동차입니다. 자동차는 보트가 아닙니다.

100 boat boa boat instance-of? ! -> t 
100 boat boa car instance-of? ! -> f 

대신 요소의 모든 개체가 자신의 전문 instance? 단어가 있습니다

우리는 같은 마지막 두 줄을 바꿔 수 있습니다. 간결함과 가독성을위한 것입니까, 아니면 구현 이유가 있습니까?

어떤 이유로 인해 특정 객체에서 instance? 단어를 맞춤 설정 하시겠습니까? 우리는 그것을 위해 제네릭이 ...

답변

1

귀하의 instance-of? 대부분의 시간을 작동합니다 :

: instance-of? (obj cls -- ?) [ class-of ] dip class<= ; 
123 boat boa boat instance-of? . 
t 
123 boat boa tuple instance-of? . 
t 
123 fixnum instance-of? . 
t 

을하지만 더 복잡한 유형에 대한 충분하지 않습니다 :

QUALIFIED: math.primes 
PREDICATE: even < integer 2 mod 0 = ;  
PREDICATE: prime < integer math.primes:prime? ; 
7 prime? . 
t 
6 even? 
t 
7 prime instance-of? 
f 
6 even instance-of? . 
f 

다른 이유는 최적화. 성능에 민감한 코드에 사용되는 fixnum?, string?array?과 같은 단어는 좀 더 일반적인 단어 인 instance-of?보다 훨씬 쉽습니다.