2010-09-20 23 views
9

Trong nhiều tập lệnh mà tôi viết, tôi thường xây dựng các chương trình theo "kiểu chức năng". Đó là để nói, tôi về cơ bản xác định rất nhiều chức năng lúc đầu, và sau đó áp dụng các chức năng này. Điều này dẫn đến một chuỗi các cuộc gọi hàm lồng nhau, trong đó tôi gõ ra:Bạn có nghĩ/viết khác trong vim và emac không?

  1. tên hàm
  2. đối số của nó
  3. tên hàm tiếp theo
  4. đối số của nó

... và vv trên.

Đối với trường hợp chức năng được "đường ống" cùng nhau, đầu ra của một hàm là đối số (thường là đầu tiên, nhưng không phải lúc nào) đối với hàm tiếp theo, đầu ra là đối số cho hàm tiếp theo, và ad infinitum. Trong tiền tố, các chuyển động quan trọng có thể rất nhanh nếu bạn gõ chuỗi này từ trái sang phải. Ví dụ, làm thế nào bạn gõ vào dòng thứ hai của ví dụ [Python] sau (~ mul ~ nhân lên, ~ truediv ~ được chia)?

from operator import add, mul, truediv 
print(truediv(mul(add(1,1),2),4)) 

Nếu tôi phải viết cùng một tập hợp tuyến tính (từ trái sang viết, không nhảy xung quanh), tôi có nhiều khả năng sử dụng ký hiệu thành phần hàm. Dựa trên ví dụ trước đây của tôi bằng Python, tôi có thể viết

from functional import foldr, compose, partial, flip 
print(foldr(compose,add,(partial(mul,2),partial(flip(truediv),4)))(1,1)) 

Tôi nghĩ rằng đây là vì tôi kết hợp mỗi chức năng với các đối số riêng của mình và thích loại chúng ra liên tiếp, chứ không phải là làm đầy tranh cãi với chức năng khác trước khi tranh luận danh sách cho hàm đầu tiên được hoàn thành (như được yêu cầu để loại ra ví dụ đầu tiên từ trái sang phải).

Tôi nhận thấy điều này bởi vì tôi đã là người dùng emacs trong một thời gian dài và chỉ gần đây đã thử viper/vimpuse và vim. Trong emacs, tôi có thể làm điều gì đó như

  1. [loại tên hàm và lập luận]
  2. [loại sau tên hàm]
  3. Ce
  4. [điền vào phần còn lại của các đối số]
  5. Ca
  6. [loại tên hàm tiếp theo]
  7. Ce
  8. [điền vào phần còn lại của đối số]

... và cứ như vậy, thỉnh thoảng sử dụng Mb, Mf, M-DEL (từ lạc hậu, chuyển tiếp, ngược lại-từ-từ) nếu tôi lộn xộn lên hoặc quên điều gì đó.

thời gian gần đây tôi phát hiện ra khoảng Co trong vim, mà là một phao cứu sinh - nhưng tôi thấy rằng các phím tương đương sẽ là

  1. [loại tên hàm và lập luận]
  2. Co 0
  3. [loại tên chức năng tiếp theo]
  4. Co $
  5. [điền vào phần còn lại của các đối số]
  6. Co 0
  7. [loại tên hàm tiếp theo]
  8. C-o $
  9. [điền vào phần còn lại của các đối số]

... và phần còn lại; các từ tương đương ngược, từ chuyển tiếp và ngược lại sẽ là C-o b và C-o w và C-w. Vì vậy, điều này đã cho tôi nghĩ rằng để chương trình trong vim, tôi có thể phải phát triển một bộ nhớ làm việc lớn hơn, để tôi có thể tạm dừng việc xây dựng một chức năng như tôi điền vào khác, và như vậy xuống ngăn xếp. Ngoài ra, trong việc xây dựng tài liệu văn bản, tôi thấy rằng tôi chỉnh sửa (giết, sao chép, yank) khá thường xuyên ngay cả trước khi tôi hoàn thành một ý tưởng hoàn chỉnh, điều này không phù hợp với phong cách hoạt động của vim "ở chế độ bình thường, văn bản bị chèn -mode, và quay trở lại chế độ bình thường ", mà dường như giả định rằng tôi có khả năng sản xuất một cái gì đó đáng để chỉnh sửa trong quá trình đột nhập vào chế độ chèn. Để sử dụng vim, tôi thấy rằng tôi cố ý nhiều hơn khi tôi nhập để giảm tần suất chuyển đổi giữa các chế độ. Đây có phải là vì tôi tự nhiên bị tê liệt, hoặc một khi tôi làm chủ hoặc cam kết một loạt các lệnh chính vim phù hợp với bộ nhớ cơ bắp, tôi sẽ ngừng nghĩ rằng chúng quá khác nhau?

Nếu bạn lập trình trong cả emacs và vim, bạn có thấy mình đang suy nghĩ và xây dựng các chương trình và khối văn bản khác nhau trong mỗi trình soạn thảo không?

+2

Đây phải là một wiki cộng đồng. –

+0

Bạn nói đúng - cảm ơn. Đã thay đổi. – hatmatrix

Trả lời

4

Tôi đã sử dụng vi từ những ngày cũ tốt của năm 1992 và bây giờ tôi sử dụng Emacs từ năm 2001. Tôi đã không nhận thấy bất kỳ sự khác biệt trong suy nghĩ của tôi khi lập trình chức năng và khối mã. Cả hai biên tập viên đều có những đặc điểm riêng và cách làm việc của họ, nhưng họ không mạnh đến mức họ có thể thay đổi cách suy nghĩ của bạn và cách bạn lập trình.

Tôi luôn cố gắng tìm cách để làm những gì tôi định làm. Tôi không để người biên tập buộc tôi phải làm điều gì đó mà tôi không muốn. Khi tôi lập trình thủ tục của một đoạn mã mới, tôi sử dụng kỹ thuật này được gọi là "suy nghĩ mơ ước" là mentioned in Structure and Interpretation of Computer Programs:

Bạn tưởng tượng mình trong thế giới hoàn hảo có tất cả các quy trình bạn cần theo ý của bạn. Bạn mã thuật toán của bạn với tất cả những chức năng hữu ích mà bạn sẽ cần phải thực hiện nhưng bạn chỉ có nguyên mẫu cho thời điểm này. Nó tương tự như cách tiếp cận từ trên xuống.

+0

Cảm ơn - và đồng ý với SICP. Tôi làm điều đó cũng cho mã C hoặc Fortran tôi đoán. Bạn cũng nêu bật câu hỏi cơ bản của tôi, đó là liệu người chỉnh sửa sẽ thay đổi cách bạn nghĩ ... – hatmatrix

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