小编Mar*_*amy的帖子

Frege相当于Haskell的getLine和read

是否有任何Frege相当于Haskell,getLineread从标准库中的控制台解析输入?

目前我这样做:

import frege.IO

getLine :: IO String
getLine = do
 isin <- stdin
 isrin <- IO.InputStreamReader.new isin
 brin <- IO.BufferedReader.fromISR isrin
 line <- brin.readLine
 return $ fromExceptionMaybe line

fromExceptionMaybe :: Exception (Maybe a) -> a
fromExceptionMaybe (Right (Just r)) = r
fromExceptionMaybe (Right _) = error "Parse error on input"
fromExceptionMaybe (Left l) = error l.getMessage

pure native parseInt java.lang.Integer.parseInt :: String -> Int

main _ = do
 line <- getLine
 println $ parseInt line …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming jvm-languages frege

15
推荐指数
1
解决办法
901
查看次数

在JVM上运行编译为JavaScript的Haskell

Java 8有一个名为Nashorn的内置JavaScript引擎,因此实际上可以在JVM上运行编译为JavaScript的Haskell.

以下程序有效:

{-# LANGUAGE JavaScriptFFI #-}

module Main where

foreign import javascript unsafe "console={log: function(s) { java.lang.System.out.print(s); }}"
  setupConsole :: IO ()

foreign import javascript unsafe "java.lang.System.exit($1)"
  sysexit :: Int -> IO ()

main = do
  setupConsole
  putStrLn "Hello from Haskell!"
  sysexit 0
Run Code Online (Sandbox Code Playgroud)

我们可以运行它:( 旁注:可以将它作为普通的Java程序运行.jjs只是在JVM上运行纯JavaScript代码的便捷方式)

$ ghcjs -o Main Main.hs
[1 of 1] Compiling Main             ( Main.hs, Main.js_o )
Linking Main.jsexe (Main)

$ which jjs
~/bin/jdk/bin/jjs

$ jjs Main.jsexe/all.js
Hello from Haskell!
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,console.log需要使用java.lang.System.print …

haskell ghcjs

11
推荐指数
1
解决办法
378
查看次数

阿卡与弗雷格比斯卡拉对手跑得慢

作为练习,我将这些ScalaJava的Akka示例移植到了Frege.虽然它工作正常,但它比Scala(540ms)对应的运行速度慢(11s).

module mmhelloworld.akkatutorialfregecore.Pi where
import mmhelloworld.akkatutorialfregecore.Akka

data PiMessage = Calculate | 
                Work {start :: Int, nrOfElements :: Int} |
                Result {value :: Double} | 
                PiApproximation {pi :: Double, duration :: Duration}

data Worker = private Worker where
    calculatePiFor :: Int -> Int -> Double
    calculatePiFor !start !nrOfElements = loop start nrOfElements 0.0 f where
        loop !curr !n !acc f = if n == 0 then acc
                               else loop (curr + 1) (n - 1) (f acc …
Run Code Online (Sandbox Code Playgroud)

scala akka frege

9
推荐指数
1
解决办法
723
查看次数

表达在弗雷格的渴望,但在哈斯克尔懒惰?

在Haskell中,以下代码打印"[1,2,3,4,5":

foo = take 10 $ show $ numbersFrom 1 where 
  numbersFrom start = start : numbersFrom (start + 1) -- could use [1..]
Run Code Online (Sandbox Code Playgroud)

但在弗雷格,它抛出OutOfMemoryError以下代码:

foo = take 10 $ unpacked $ show $ numbersFrom 1 where
  numbersFrom start = start : numbersFrom (start + 1)
Run Code Online (Sandbox Code Playgroud)

这里唯一的区别是unpacked转换String[Char]和FWIW所需的unpacked功能,功能是急切的.为什么整个表达式不能像Haskell一样懒惰?是否有可能在弗雷格实现与Haskell相似的东西?

haskell frege

6
推荐指数
2
解决办法
443
查看次数

Scala:为什么Float.floatToIntBits(2f)失败了?

scala> Float.floatToI
Run Code Online (Sandbox Code Playgroud)

在此处按下选项卡时,会显示Float.floatToIntBits.但,

scala> Float.floatToIntBits(2f)
<console>:6: error: value floatToIntBits is not a member of object Float
       Float.floatToIntBits(2f)
             ^
Run Code Online (Sandbox Code Playgroud)

scala

4
推荐指数
1
解决办法
472
查看次数

计数反转:Frege中的StackOverflowError在Haskell中工作正常

我试图计算一个数字列表的倒数.以下Frege程序适用于少量数字,但抛出StackOverflowError为100000个数字.

import frege.IO

inversionCount [] _ = (0, [])
inversionCount [x] _ = (0, [x])
inversionCount xs n = (count, sorted) where
  count = lcount + rcount + mergecount
  (lcount, lsorted) = inversionCount left lsize
  (rcount, rsorted) = inversionCount right rsize
  (mergecount, sorted) = inversionMergeCount lsorted lsize rsorted rsize (0, [])
  (left, right) = splitAt mid xs
  mid = n `quot` 2
  lsize = mid
  rsize = n - mid

inversionMergeCount xs _ [] _ (acc,sorted) = (acc, reverse sorted …
Run Code Online (Sandbox Code Playgroud)

haskell frege

4
推荐指数
1
解决办法
396
查看次数

Javascript Regex - 插入单词(命中)

是否可以将找到的单词插入到替换中?

$(function() {

    content = 'hallo mein name ist peter und ich komme aus berlin. Und du?';

    words = 'mein na,berlin'

    words = words.replace(/,/,'\|');
    words = words.replace(/\s/,'\\s');

    regex = new RegExp(words,'gi');

    content = content.replace(regex,'<strong>*insert here the word that was found*</strong>');

    alert(''+content+'');

});
Run Code Online (Sandbox Code Playgroud)

工作示例 http://www.jsfiddle.net/V9Euk/227/

提前致谢!彼得

javascript regex

3
推荐指数
1
解决办法
2568
查看次数