2012-04-21 30 views
12

Trong R programing for those coming from other languages John Cook nói rằngSự phân biệt giữa phạm vi từ vựng và từ vựng là gì?

R sử dụng Phạm vi từ vựng trong khi S-PLUS sử dụng phạm vi tĩnh. Sự khác biệt có thể là tinh tế, đặc biệt là khi sử dụng bao đóng.

Tôi thấy điều này kỳ lạ bởi vì tôi luôn nghĩ phạm vi từ vựng và phạm vi tĩnh ở nơi đồng nghĩa.

Có những thuộc tính riêng biệt cho phạm vi từ vựng và tĩnh hay là sự khác biệt này thay đổi từ cộng đồng này sang cộng đồng, người này sang người khác? Nếu vậy, các trại tổng quát là gì và làm cách nào để tôi phân biệt chúng với nhau để tôi có thể hiểu rõ hơn về một số ý nghĩa khi họ sử dụng những từ này.

+0

Tôi đoán chúng có nghĩa là 'động' thay vì' lexical'. – Mehrdad

+2

@Mehrdad R không được tự động dò tìm – efrey

+0

Ngạc nhiên .. tò mò muốn biết ý của chúng là gì. Cảm ơn vì đã cho tôi biết. – Mehrdad

Trả lời

10

Wikipedia (và tôi) đồng ý với bạn rằng các thuật ngữ "phạm vi từ vựng" và "phạm vi tĩnh" là đồng nghĩa. This Lua discussion cố gắng phân biệt, nhưng lưu ý rằng mọi người không đồng ý với những gì mà sự khác biệt đó là. :-)

Dường như với tôi rằng sự khác biệt đã cố gắng phải làm với việc truy cập tên trong một bản ghi kích hoạt chức năng khác ("ngăn xếp ngăn xếp", nếu bạn muốn) so với bản ghi thực hiện nhiều nhất, chủ yếu (? chỉ) xảy ra trong các chức năng lồng nhau:

function f: 
    var x 
    function h: 
     var y 
     use(y) -- obviously, accesses y in current activation of h 
     use(x) -- the question is, which x does this access? 

với phạm vi từ vựng, câu trả lời là "sự hoạt hóa f đó gọi là sự hoạt hóa h" và với phạm vi năng động, nó có nghĩa là" kích hoạt gần đây nhất mà có bất kỳ biến có tên là x "(có thể không phải là f). Mặt khác, nếu ngôn ngữ cấm sử dụng x, thì không có câu hỏi nào về "mà x là lỗi" vì câu trả lời là "". :-) Dường như một số người sử dụng "phạm vi tĩnh" để tham khảo trường hợp thứ ba này.

+1

Vì vậy, nói cách khác, phạm vi từ vựng mà không đóng cửa? – Mehrdad

+2

Có. Tất nhiên tôi (như OP) đang thực sự đoán những gì họ có ý nghĩa. – torek

+0

Thú vị ... +1 mát mẻ – Mehrdad

4

tài liệu chính thức R cũng đề cập đến sự khác nhau về phạm vi giữa R và S-plus: http://cran.r-project.org/doc/manuals/R-intro.html#Scope

Ví dụ được đưa từ các liên kết có thể được đơn giản hóa như thế này:

cube <- function(n) { 
    sq <- function() n*n 
    n*sq() 
} 

Kết quả từ S-Plus và R khác nhau:

## first evaluation in S 
S> cube(2) 
Error in sq(): Object "n" not found 
Dumped 
S> n <- 3 
S> cube(2) 
[1] 18 
## then the same function evaluated in R 
R> cube(2) 
[1] 8 

Cá nhân tôi nghĩ cách xử lý biến trong R là tự nhiên hơn.

Các vấn đề liên quan