2016-03-21 36 views
2

Birisi işaret etmeden önce, şu cevaba baktım: Best way to call Haskell functions from within Java ve bu cevapları okurken tamamen kayboldum.Java'dan Haskell nasıl çağrılır?

"output.hs" adlı bir dosyada Haskell işlevlerim var. Normalde bu işlevleri yerine getirmek için, Hugs gibi bir tercüman kullanırdım ve komutlarımdan komutlarını girerdim.

Yapmak istediğim, bu işlemi bir Java uygulamasından öykünmek. Kullanıcının, Haskell'de bir komut yazacağı bir Java swing textfield'ım var ve yapmak istediğim, bu komutun yorumlanması ve çıktısının yakındaki bazı metin alanlarında görüntülenmesi. Esasen bir Haskell tercümanı için bir öneri yapıyorum.

Bu konuda doğrudan deneyime sahip olan var mı?

+5

Bu çağrılmamalı mı, Haskell'den java'yı nasıl aramalı? –

+0

Evet, sanırım başlığı kaza ile değiştirdim. – dinstruction

+1

@MaxLipton, bu cevapları okumayı yitirmiş olmanız, soruyu cevaplamadıkları anlamına gelmez. Bu sadece onları anlamak için daha fazla öğrenmeniz gerektiği anlamına gelir. – sclv

cevap

3

Nasıl bir GHCi/Hugs işlemi yapın, girdiyi gönderin ve stdout ve stderr'i uygulamanıza yeniden yönlendirin? Java API zaten ihtiyacınız olan şeylere sahiptir, örn. java.lang.ProcessBuilder.

Sadece fonksiyonları açığa vurmak size Haskell'i yorumlama yeteneğini vermez, sadece bu işlevleri (kütüphane çağrısı veya hizmeti ile olsun) açığa vurmak, sadece Haskell girişini değerlendirme yeteneğini değil, sadece işlevleri açığa çıkarır.

Haskell girişini değerlendirmek için, kendi tercümanınızı yazacaksınız, mevcut olanı kullanacağız (Bence varmıyorum) veya önerdiğim seçeneği en pratik ve kolay olmalıdır: mevcut bir tercüman ve onu bir süreç olarak çağır.

Bu yaklaşımla ilgili bazı deneyimlerim oldu, işe almak çok basit, ancak beklenmedik bir sonlandırmaya dikkat edin ve doğal olarak bunun gerçekleşmesi durumunda ne yapmak istediğinize karar verin. Bu, alan adınız için çok zorsa, yorumlayıcıyı ifade başına çağırmayı da düşünebilirsiniz (ör. ghc -e "1 + 1", 2 çıkışını verecektir. Daha fazla bilgi için Bölüm 4.5.2'de GHC kılavuzunda Modes of operation'a bakın). Bu daha kolay olabilirdi ancak daha seyrek değerlendirmeler için kullanacağım çünkü daha yavaş olacak ve hızlı giriş ile fark edilebilir.