2014-07-22 15 views
7

ben lambdabot içinde Haskell için pointfree üstlenmeden aracı geldi ve F # bir pointfree tarzı haline refactored edilebilir acaba?Can F # pointfree stiline dönüştürülebilir mi? programlama ilgili bir konuyu araştırırken

Nokta kullanmama stilinin kullanımını savunmuyorum, ancak bir işlevi daha iyi anlamak için bir araç olarak görüyorum.

Not: pad, bu sorunun daha önceki bir sürümünü yanıtladı, ancak bu soruyu cevap olarak başkalarının öğrenmesini ve F # kullanmasını değerli olduğunu düşündüm ve bunun bazı yakın oylar nedeniyle silinmesini istemedim.

Not: Soruyu değiştirdiğim için, yanıtı F # kullanarak ücretsiz bir tarzda kodlanamayacağı anlamına gelmez. Pek çok durumda yapılabilir, ancak takip etmeniz gereken kısıtlamalar vardır.

+0

"Sorular tavsiye ya da inatçı cevaplar ve spam çekmek eğilimindedir kaynak konu dışı yığın taşması içindir off-site bir araçtır, kütüphane veya favori bulmamızı isteyen. Bunun yerine, sorunu tanımlamak ve hangi şimdiye kadar yapılmış onu çözmek için. " –

cevap

11

Kısa cevap

böyle bir araç elverişsiz hale F # bir kaç şey vardır sayılı

Uzun cevap

. (1) .NET etkileşimi nedeniyle, F # kodu genellikle yan etkilere sahiptir ve yan etkiler devreye girdiğinde otomatik kod dönüşümü gerçekten zorlaşır. Haskell ile durum böyle değil; equational akıl Haskell çok daha kolaydır ve onların değerlendirmelerini değiştirmeden sağ tarafın sol tarafını yeniden yazabilirsiniz. (2) F # 'daki noktalamayan programlama value restriction ile sınırlandırılmıştır. Bu sorunu yaşamadan agresif olarak kod dönüşümü yapabileceğinizden emin değilim.

F # kodunun saf olduğunu ve kullanıcılara bazı ipuçları verebilmemiz için belirli durumlarda değer kısıtlamasının gerçekleşmediğini varsaymanın daha pratik olduğunu düşünüyorum. Kullanıcılar önerilerin gerçekten doğru olduğunu değerlendirdikten sonra önerileri açıkça uygulayabilirler. Yönlendirdiğinizden HLint yaklaşımına yaklaşıyor. FSharpLint, bu yönde bazı astarlama kuralları ekledi.

+0

Böyle bir aracın neden F # için bulunamayacağı hakkında ayrıntılı bilgi verdiğiniz için teşekkür ederiz. Gelecekte ihtiyaç duyulması halinde saklanmak için güzel bir gerçektir. Belki bir gün böyle bir araç yapacağım ama değer kısıtlamasına neden olan yerleri belirleyeceğim ve böylece herkes bundan öğrenebilir. –

+0

Sen noktası içermeyen üstlenmeden uygulamak güvenlidir dilinin bir alt kümesini tanımlayabilirsiniz. Ancak, 'saf' anahtar kelimesi veya "Saf" özelliği gibi bazı özel işaretleyiciler olmadan, güvenli bölge içinde kalmanızı sağlamak zordur. – pad