r*g 发帖数: 3159 | 1 班上有没有玩过J语言的?有什么评论?
看底下这个算24,没有其它的能写得更短了吧?
http://rosettacode.org/wiki/24_game/Solve#J
perm=: (A.&i.~ !) 4
ops=: ' ',.'+-*%' {~ >,{i.each 4 4 4
cmask=: 1 + 0j1 * i.@{:@$@[ e. ]
left=: [ #!.'('~"1 cmask
right=: [ #!.')'~"1 cmask
paren=: 2 :'[: left&m right&n'
parens=: ], 0 paren 3, 0 paren 5, 2 paren 5, [: 0 paren 7 (0 paren 3)
all=: [: parens [:,/ ops ,@,."1/ perm { [:;":each
answer=: ({.@#~ 24 = ".)@all |
w***g 发帖数: 5958 | 2 有人能看懂吗?
【在 r*g 的大作中提到】 : 班上有没有玩过J语言的?有什么评论? : 看底下这个算24,没有其它的能写得更短了吧? : http://rosettacode.org/wiki/24_game/Solve#J : perm=: (A.&i.~ !) 4 : ops=: ' ',.'+-*%' {~ >,{i.each 4 4 4 : cmask=: 1 + 0j1 * i.@{:@$@[ e. ] : left=: [ #!.'('~"1 cmask : right=: [ #!.')'~"1 cmask : paren=: 2 :'[: left&m right&n' : parens=: ], 0 paren 3, 0 paren 5, 2 paren 5, [: 0 paren 7 (0 paren 3)
|
a9 发帖数: 21638 | 3 看不懂。。。。。
【在 w***g 的大作中提到】 : 有人能看懂吗?
|
a**e 发帖数: 64 | |
t****t 发帖数: 6806 | 5 我以为perl的标点符号已经很多了. 没想到...
【在 a**e 的大作中提到】 : 这个程序一半都是标点符号。看着够累。
|
r*g 发帖数: 3159 | 6 底下这个不算,原来质数是内置的。。。
算1e9 以内有多少个质数:
(p:inv) 1e9
【在 r*g 的大作中提到】 : 班上有没有玩过J语言的?有什么评论? : 看底下这个算24,没有其它的能写得更短了吧? : http://rosettacode.org/wiki/24_game/Solve#J : perm=: (A.&i.~ !) 4 : ops=: ' ',.'+-*%' {~ >,{i.each 4 4 4 : cmask=: 1 + 0j1 * i.@{:@$@[ e. ] : left=: [ #!.'('~"1 cmask : right=: [ #!.')'~"1 cmask : paren=: 2 :'[: left&m right&n' : parens=: ], 0 paren 3, 0 paren 5, 2 paren 5, [: 0 paren 7 (0 paren 3)
|
d****n 发帖数: 1637 | 7 反人类啊,你留着好好用吧。
万一你老板要裁员,没人能整你的J语言,你就幸存了。
努力多写点J语言的应用,让后人无从下手,让老板抓耳挠腮。
【在 r*g 的大作中提到】 : 底下这个不算,原来质数是内置的。。。 : 算1e9 以内有多少个质数: : (p:inv) 1e9
|
n******t 发帖数: 4406 | 8 玩过。。。
和K差不多,但是K肯定比这个短。
【在 r*g 的大作中提到】 : 班上有没有玩过J语言的?有什么评论? : 看底下这个算24,没有其它的能写得更短了吧? : http://rosettacode.org/wiki/24_game/Solve#J : perm=: (A.&i.~ !) 4 : ops=: ' ',.'+-*%' {~ >,{i.each 4 4 4 : cmask=: 1 + 0j1 * i.@{:@$@[ e. ] : left=: [ #!.'('~"1 cmask : right=: [ #!.')'~"1 cmask : paren=: 2 :'[: left&m right&n' : parens=: ], 0 paren 3, 0 paren 5, 2 paren 5, [: 0 paren 7 (0 paren 3)
|
d**s 发帖数: 98 | 9 看不懂。
【在 a**e 的大作中提到】 : 这个程序一半都是标点符号。看着够累。
|
c*****m 发帖数: 1160 | |
|
|
r*g 发帖数: 3159 | 11 评价如何?
纯粹浪费时间?挺有意思?
J语言的作者因为这个(前身ADL)拿了图灵奖,也不知除了这些toy problem, J到底有什
么优势。
【在 n******t 的大作中提到】 : 玩过。。。 : 和K差不多,但是K肯定比这个短。
|
n******t 发帖数: 4406 | 12 挺好的,我觉得functional programming language里面,这一类的设计可能
是最简洁和elegant的。而且速度也还挺快. 做统计也还不错,虽然没法利用多个core.
我觉得最大的优势是一旦你熟悉语法之后,写程序的速度,无人能比。哈哈。。。
可读性就看你愿意多简洁了,如果你多打几个字给那些匿名函数,
可读性只高会比别的程序高不低。
【在 r*g 的大作中提到】 : 评价如何? : 纯粹浪费时间?挺有意思? : J语言的作者因为这个(前身ADL)拿了图灵奖,也不知除了这些toy problem, J到底有什 : 么优势。
|
m********5 发帖数: 17667 | 13 我从来都觉得脑残才会追求语言最短...
code是拿来读的好不好
【在 r*g 的大作中提到】 : 班上有没有玩过J语言的?有什么评论? : 看底下这个算24,没有其它的能写得更短了吧? : http://rosettacode.org/wiki/24_game/Solve#J : perm=: (A.&i.~ !) 4 : ops=: ' ',.'+-*%' {~ >,{i.each 4 4 4 : cmask=: 1 + 0j1 * i.@{:@$@[ e. ] : left=: [ #!.'('~"1 cmask : right=: [ #!.')'~"1 cmask : paren=: 2 :'[: left&m right&n' : parens=: ], 0 paren 3, 0 paren 5, 2 paren 5, [: 0 paren 7 (0 paren 3)
|
n******t 发帖数: 4406 | 14 这code非常好读,当你掌握了那几个关键词之后,比大部分C++/Java都好读。
【在 m********5 的大作中提到】 : 我从来都觉得脑残才会追求语言最短... : code是拿来读的好不好
|
m********5 发帖数: 17667 | 15 有好的IDE你还在意多打几个字?!
core.
【在 n******t 的大作中提到】 : 挺好的,我觉得functional programming language里面,这一类的设计可能 : 是最简洁和elegant的。而且速度也还挺快. 做统计也还不错,虽然没法利用多个core. : 我觉得最大的优势是一旦你熟悉语法之后,写程序的速度,无人能比。哈哈。。。 : 可读性就看你愿意多简洁了,如果你多打几个字给那些匿名函数, : 可读性只高会比别的程序高不低。
|
n******t 发帖数: 4406 | 16 不是打字的问题。是思维变简单了。。。
就像递归一般比非递归的写法简单一个道理。
【在 m********5 的大作中提到】 : 有好的IDE你还在意多打几个字?! : : core.
|
g******w 发帖数: 78 | 17 不是matrix genius就别折腾了。我也研究过几天。后来有一次看Roger Hui的slides发
现他居然也混淆了两个相近但结果天差地远的语法,可能是无心之失,但也可见J语法
的古怪,我自问智商没他高,就毅然放弃了。当然不以使用为目的的浏览一下还是很长
见识的,我确实从中学习了不少。 |
a****e 发帖数: 9589 | 18 我觉得程序要是都这么写的话,我宁愿用电话机直接按0和1
【在 r*g 的大作中提到】 : 班上有没有玩过J语言的?有什么评论? : 看底下这个算24,没有其它的能写得更短了吧? : http://rosettacode.org/wiki/24_game/Solve#J : perm=: (A.&i.~ !) 4 : ops=: ' ',.'+-*%' {~ >,{i.each 4 4 4 : cmask=: 1 + 0j1 * i.@{:@$@[ e. ] : left=: [ #!.'('~"1 cmask : right=: [ #!.')'~"1 cmask : paren=: 2 :'[: left&m right&n' : parens=: ], 0 paren 3, 0 paren 5, 2 paren 5, [: 0 paren 7 (0 paren 3)
|
t*****n 发帖数: 4908 | 19 实际工作中,coding的时间估计20%都不到。80%以上都在处理bug。容易懂的程序也容
易维护。
【在 n******t 的大作中提到】 : 不是打字的问题。是思维变简单了。。。 : 就像递归一般比非递归的写法简单一个道理。
|
n******t 发帖数: 4406 | 20 这是你写的code。
【在 t*****n 的大作中提到】 : 实际工作中,coding的时间估计20%都不到。80%以上都在处理bug。容易懂的程序也容 : 易维护。
|
|
|
t****a 发帖数: 1212 | 21 不仔细看还以为是把某人的code给gzip了一下cat出来
不过这真是个好例子,语言本身的性能还真有个比较了... 大力鼓吹的Go也很长,
python也很长。
几种functional programming language: clojure, lisp, haskell, scala, R都很精
炼,果然是更适合用来做计算啊。
coffee script长得貌似FP语言。有哪位朋友有经验说说么? |
t****a 发帖数: 1212 | 22 有个笑话说看java程序看了三页,发现它什么都没干。
是越来越不喜欢这种冗长的玩意了,跟在垃圾堆里找东西一样的感觉。
【在 m********5 的大作中提到】 : 有好的IDE你还在意多打几个字?! : : core.
|
z*******3 发帖数: 13709 | 23 所以结构是最重要的,要看三页才能弄懂是怎么回事的代码肯定不行
好代码光看类名就能知道作者在做什么
【在 t****a 的大作中提到】 : 有个笑话说看java程序看了三页,发现它什么都没干。 : 是越来越不喜欢这种冗长的玩意了,跟在垃圾堆里找东西一样的感觉。
|
t*****n 发帖数: 4908 | 24 你想说什么?实际情况就是这样的。从0开始开发的软件很难遇到。
【在 n******t 的大作中提到】 : 这是你写的code。
|
b***e 发帖数: 1419 | 25 I don't know who wrote the Haskell one on the wiki provided, but here's a
shorter one:
rec l@(x:[]) = [(a, e) | (a, e) <- l, a == 24]
rec l = [c |
(a, ea) <- l,
(b, eb) <- l `rm` (a, ea),
op <- ['+', '-', '*', '/'],
n <- [(r, pr ea op eb) | r <- cal a op b] ++
[(r, pr eb op ea) | r <- cal b op a],
c <- rec (n:(l `rm` (a, ea) `rm` (b, eb)))
]
with the following lib support:
rm [] x = []
rm (y:ys) x = if x == y then ys else y:(rm ys x)
pr ea op eb = "(" ++ ea ++ [op] ++ eb ++ ")"
cal a op b = case op of
'+' -> [a+b]
'-' -> [a-b]
'*' -> [a*b]
'/' -> if b == 0 then [] else [a/b]
【在 r*g 的大作中提到】 : 班上有没有玩过J语言的?有什么评论? : 看底下这个算24,没有其它的能写得更短了吧? : http://rosettacode.org/wiki/24_game/Solve#J : perm=: (A.&i.~ !) 4 : ops=: ' ',.'+-*%' {~ >,{i.each 4 4 4 : cmask=: 1 + 0j1 * i.@{:@$@[ e. ] : left=: [ #!.'('~"1 cmask : right=: [ #!.')'~"1 cmask : paren=: 2 :'[: left&m right&n' : parens=: ], 0 paren 3, 0 paren 5, 2 paren 5, [: 0 paren 7 (0 paren 3)
|
t****a 发帖数: 1212 | 26 虽然不会写haskell但知道这个要顶
【在 b***e 的大作中提到】 : I don't know who wrote the Haskell one on the wiki provided, but here's a : shorter one: : rec l@(x:[]) = [(a, e) | (a, e) <- l, a == 24] : rec l = [c | : (a, ea) <- l, : (b, eb) <- l `rm` (a, ea), : op <- ['+', '-', '*', '/'], : n <- [(r, pr ea op eb) | r <- cal a op b] ++ : [(r, pr eb op ea) | r <- cal b op a], : c <- rec (n:(l `rm` (a, ea) `rm` (b, eb)))
|
g*****g 发帖数: 34805 | 27 关于语言简洁:
我老有一年维护一个Scala写的Server。代码简洁是简洁,经常一行代码把三件事情干
了。
出错的时候也一样,一个简单的错,知道是哪一行,不知道是因为三个的哪一个导致了
错误,只能挨个蒙。效率可想而知。 |
t****a 发帖数: 1212 | 28 在下愚见:
语言的发展趋势是从具体-》抽象,可以想象30年前一个汇编程序员在抱怨C的时候,
说:我老有一年维护一个C写的code。代码简洁是简洁,经常一行代码把三件事情干了
。出错的时候也一样,一个简单的错,知道是哪一行,不知道是因为三个的哪一个导致
了错误,只能挨个蒙。效率可想而知。
所以...当code简洁,更佳抽象后,必然是一行代码做更多的事情。如何让debug变的简
单,依赖于程序员的经验,新的debug方法和工具的开发。
同时,FP不是万能的。对某些任务而言FP可能更合适(比如科学计算),对另一些任务
至少目前它并不是很合适。
【在 g*****g 的大作中提到】 : 关于语言简洁: : 我老有一年维护一个Scala写的Server。代码简洁是简洁,经常一行代码把三件事情干 : 了。 : 出错的时候也一样,一个简单的错,知道是哪一行,不知道是因为三个的哪一个导致了 : 错误,只能挨个蒙。效率可想而知。
|
g*****g 发帖数: 34805 | 29 如果是因为高度抽象引起的代码简洁,就如从汇编到C,你说得有道理。
我不认为FP的抽象高度高于OOP。FP跟OOP更像正交的两种编程方式。
写一些特定的逻辑,比如编译,FP很合适,在大多数时候,OOP更接近于现实世界的建
模。
FP的简洁通常是因为FP是动态语言而产生的,当然lamda expression也有所帮助。
诸如Groovy不是FP,也很简洁。动态语言简洁归简洁,有自身的缺点,这里我就不多说
了。
【在 t****a 的大作中提到】 : 在下愚见: : 语言的发展趋势是从具体-》抽象,可以想象30年前一个汇编程序员在抱怨C的时候, : 说:我老有一年维护一个C写的code。代码简洁是简洁,经常一行代码把三件事情干了 : 。出错的时候也一样,一个简单的错,知道是哪一行,不知道是因为三个的哪一个导致 : 了错误,只能挨个蒙。效率可想而知。 : 所以...当code简洁,更佳抽象后,必然是一行代码做更多的事情。如何让debug变的简 : 单,依赖于程序员的经验,新的debug方法和工具的开发。 : 同时,FP不是万能的。对某些任务而言FP可能更合适(比如科学计算),对另一些任务 : 至少目前它并不是很合适。
|
n*w 发帖数: 3393 | |
|
|
r*g 发帖数: 3159 | 31 这个J高度抽象.它把常见逻辑结构抽象成了算符.那些奇怪符号,就像+-*/()的延伸. F#
/lisp/haskell,都没有这个奇怪.
【在 g*****g 的大作中提到】 : 如果是因为高度抽象引起的代码简洁,就如从汇编到C,你说得有道理。 : 我不认为FP的抽象高度高于OOP。FP跟OOP更像正交的两种编程方式。 : 写一些特定的逻辑,比如编译,FP很合适,在大多数时候,OOP更接近于现实世界的建 : 模。 : FP的简洁通常是因为FP是动态语言而产生的,当然lamda expression也有所帮助。 : 诸如Groovy不是FP,也很简洁。动态语言简洁归简洁,有自身的缺点,这里我就不多说 : 了。
|
i**c 发帖数: 753 | 32 APL
【在 r*g 的大作中提到】 : 评价如何? : 纯粹浪费时间?挺有意思? : J语言的作者因为这个(前身ADL)拿了图灵奖,也不知除了这些toy problem, J到底有什 : 么优势。
|
b***e 发帖数: 1419 | 33 什么叫动态语言?Dynamically typed language? Haskell, ML, Ocaml等都是
Statically typed languaged。整个FP发展的趋势也是以type theory为主(参见每年的
International conference of functional programming)。不懂的东西不要信口开河。
【在 g*****g 的大作中提到】 : 如果是因为高度抽象引起的代码简洁,就如从汇编到C,你说得有道理。 : 我不认为FP的抽象高度高于OOP。FP跟OOP更像正交的两种编程方式。 : 写一些特定的逻辑,比如编译,FP很合适,在大多数时候,OOP更接近于现实世界的建 : 模。 : FP的简洁通常是因为FP是动态语言而产生的,当然lamda expression也有所帮助。 : 诸如Groovy不是FP,也很简洁。动态语言简洁归简洁,有自身的缺点,这里我就不多说 : 了。
|
t****a 发帖数: 1212 | 34 确实FP!=动态
goodbug是java的大拿。他对动态语言是有些抵制的。他以前的帖子认为动态语言不过
“是一堆零散的script的组合”,很不stable,robust
静态语言的效率确实要高很多,不过,静态语言真的“不好玩”,它们不能交互编程..
.不能使用一些很高级的feature...写静态语言的时候会觉得语言真的很蠢
不懂type inference,它们好像使得静态语言聪明了一些
河。
【在 b***e 的大作中提到】 : 什么叫动态语言?Dynamically typed language? Haskell, ML, Ocaml等都是 : Statically typed languaged。整个FP发展的趋势也是以type theory为主(参见每年的 : International conference of functional programming)。不懂的东西不要信口开河。
|
g******y 发帖数: 1101 | 35 真正追求玩具语言的,大多都是搞系统的而非写软件的。 |
r********n 发帖数: 7441 | 36 有一种数学规划建模语言 GAMS, 除去变量等式定义行外,只要 2 + 1 行即可搞定
2 行用于定义等式,1 行求解 (打印全部解也很容易,再加2-3行循环即可)
【在 r*g 的大作中提到】 : 班上有没有玩过J语言的?有什么评论? : 看底下这个算24,没有其它的能写得更短了吧? : http://rosettacode.org/wiki/24_game/Solve#J : perm=: (A.&i.~ !) 4 : ops=: ' ',.'+-*%' {~ >,{i.each 4 4 4 : cmask=: 1 + 0j1 * i.@{:@$@[ e. ] : left=: [ #!.'('~"1 cmask : right=: [ #!.')'~"1 cmask : paren=: 2 :'[: left&m right&n' : parens=: ], 0 paren 3, 0 paren 5, 2 paren 5, [: 0 paren 7 (0 paren 3)
|
r*g 发帖数: 3159 | 37 具体到算24,还能转化成优化问题求解?您能不能给具体写出来用gams?
【在 r********n 的大作中提到】 : 有一种数学规划建模语言 GAMS, 除去变量等式定义行外,只要 2 + 1 行即可搞定 : 2 行用于定义等式,1 行求解 (打印全部解也很容易,再加2-3行循环即可)
|