2010-01-02 4 views
0

의 명령 줄에서 인수를 처리하는 가장 효율적인 방법은 표현식에 따라 단어 목록의 하위 집합을 계산하는 루비 스크립트를 작성하는 것입니다.접두어 표기법

일반 이항 연산은

./eval.rb wordlist && a c 
or 
./eval.rb wordlist && || a b c 

먼저 호출이 모든 단어가 적어도 하나의 'A'와 'C'가 새로운 단어 목록을 생성 의미처럼 유효한 호출이 될 것

&& And operator 
|| Or operator 
++ Concatenate operator 
! Negation operator 

있습니다. 제 질문은 효율적인 방법으로 논쟁을 어떻게 처리합니까? 아마도 재귀? 붙어있어 ...

미리 감사드립니다.

+0

부정 연산자는 분명히 이진 파일이 아닙니다. 죄송합니다. –

답변

0

접두사 표기법이있는 문법처럼 보입니다. 실제로 스택은 당신의 친구이며, 가장 쉬운 스택은 호출 스택입니다.

expression ::= number | operand number number 
operand ::= '+' | '-' 

이 그것을 평가하는 코드입니다 : 예를 들어,이 문법에 대해,이 루비이지만

#!/usr/bin/ruby1.8 

@tokens = ['*', 2, '+', 3, 4] 

def evaluate 
    token = @tokens.shift # Remove first token from @tokens 
    case token 
    when '*' 
    return evaluate * evaluate 
    when '+' 
    return evaluate + evaluate 
    else 
    return token 
    end 
end 

puts evaluate # => 14 

를, 그것은 의사 코드를 충분히 가까이. 나는 Ruby를 필요로하지는 않지만 Ruby를 모르는 사람에게 더 명확 할 수 있기 때문에 명시 적으로 반환했습니다.

0

스택을 사용하십시오. 최대 크기는 인수의 수입니다.