我可以单程使用
require 'json'
def saveUserLib(user_lib)
File.open("/Users/name/Documents/user_lib.json","w") do |f|
f.write($user_lib.to_json)
end
end
uname = gets.chomp
$user_lib["_uname"] = uname
saveUserLib($user_lib)
Run Code Online (Sandbox Code Playgroud)
但是我如何将它作为我的user_lib重新获得呢?
以python内置pow()函数为例.
xs = [1,2,3,4,5,6,7,8]
from functools import partial
list(map(partial(pow,2),xs))
>>> [2, 4, 8, 16, 32, 128, 256]
Run Code Online (Sandbox Code Playgroud)
但是我如何将xs提高到2的幂?
要得到 [1, 4, 9, 16, 25, 49, 64]
list(map(partial(pow,y=2),xs))
TypeError: pow() takes no keyword arguments
Run Code Online (Sandbox Code Playgroud)
我知道列表理解会更容易.
使用一个简单的过滤器,测试0-100范围内的输入.
def foo(foo_input):
if 0 <= foo_input <= 100:
return f_input
Run Code Online (Sandbox Code Playgroud)
如果,则返回none foo_input is > 100.但它真的"不"会返回任何东西吗?或者功能总是必须返回一些东西?
我已经开始将项目Euler站点作为一种学习Haskell的方法,并改进我的Python和Ruby.我认为Haskell和Python版本都可以,但我确信Ruby必须有一个更简洁的方法.
这不是关于如何使一种语言看起来像另一种语言.
这是问题1:
问:添加1000以下的所有自然数,即3或5的倍数.
哈斯克尔:
sum [ x | x <- [1..999], mod x 3 == 0 || mod x 5 == 0 ]
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
sum ( [ x for x in range(1,1000) if x % 3 == 0 or x % 5 == 0 ] )
Run Code Online (Sandbox Code Playgroud)
红宝石:
(1..999) . map {|x| x if x % 3 == 0 || x % 5 == 0 } . compact . inject(:+)
Run Code Online (Sandbox Code Playgroud)
他们都给出了相同的答案.
好的,所以Python可以成为:
sum ( x for …Run Code Online (Sandbox Code Playgroud) 有没有人知道如何在emacs中使用haskell打印λ而不是\.我知道可以使用haskell-font-lock-symbols,但我发现其余部分很难阅读 - 箭头太小了!
是否有一种简单的方法来覆盖其余的钥匙?
是否可以一次性分配给列表切片,这将实现以下目标:
mylist = [1,2,3,4,5,6,7]
xs = mylist[:-1]
x = mylist[-1]
xs == [1,2,3,4,5,6]
x == 7
Run Code Online (Sandbox Code Playgroud)
我知道我可以这样写:
xs,x = mylist[:-1], mylist[-1]
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有可能以任何其他方式.或者被Haskell的模式匹配宠坏了.
就像是 x,xs = mylist[:funky:slice:method:]
我想在Python 3中运行以下bash命令:
ls -l
Run Code Online (Sandbox Code Playgroud)
我知道我可以做以下事情:
from subprocess import call
call(['ls', '-l'])
Run Code Online (Sandbox Code Playgroud)
如何将此输出保存到文件中,或将其放入列表或集合中?
[-rw-r--r--] [1] [name] [staff] [426] [14 Jan 21:52] [HelloWorld.class]
[-rw-r--r--@] [1] [name] [staff] [107] [14 Jan 21:51] [HelloWorld.java]
...
etc.
Run Code Online (Sandbox Code Playgroud)
我希望能够直接访问特定信息,然后将其添加到集合中,但我不知道将列出多少项目.
任何提示,片段或示例都会有所帮助.
编写一个通用函数,可以迭代任何可迭代的返回现在,下一对.
def now_nxt(iterable):
iterator = iter(iterable)
nxt = iterator.__next__()
for x in iterator:
now = nxt
nxt = x
yield (now,nxt)
for i in now_nxt("hello world"):
print(i)
('h', 'e')
('e', 'l')
('l', 'l')
('l', 'o')
('o', ' ')
(' ', 'w')
('w', 'o')
('o', 'r')
('r', 'l')
('l', 'd')
Run Code Online (Sandbox Code Playgroud)
我一直在考虑编写函数的最佳方法,其中可以设置每个元组中的项目数.
例如,如果是的话
func("hello",n=3)
Run Code Online (Sandbox Code Playgroud)
结果将是:
('h','e','l')
('e','l','l')
('l','l','o')
Run Code Online (Sandbox Code Playgroud)
我是新手使用timeit,所以请指出我在这里做错了什么:
import timeit
def n1(iterable, n=1):
#now_nxt_deque
from collections import deque
deq = deque(maxlen=n)
for i in iterable:
deq.append(i)
if len(deq) == n:
yield …Run Code Online (Sandbox Code Playgroud) GHCi, version 7.4.2: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> let fac 0 = 1
Prelude> let fac n = product [1..n]
Prelude> fac 100000
Segmentation fault: 11
Run Code Online (Sandbox Code Playgroud)
有没有人知道为什么会发生这种情况?
fac 10000 作品
在OS X 10.8.2上运行
嗯,所以从文件加载:
fac :: Integer -> Integer
fac 0 = 1
fac n = product [1..n]
Run Code Online (Sandbox Code Playgroud)
运行.
也很有意思的是使用
fac :: Int -> Int
返回0的fac …
例如,Luminus网站说明了这一点
Compojure路由定义只是接受请求映射和返回响应映射的函数......
Run Code Online (Sandbox Code Playgroud)(GET "/" [] "Show something") ...
但是组合路线不是功能
(defmacro GET "Generate a `GET` route."
[path args & body]
(compile-route :get path args body))
Run Code Online (Sandbox Code Playgroud)
可以使用make-route返回函数的函数,但不允许进行解构.因此,作为一个函数,你不能使用compojure的特殊语法来破坏(即向量)但是这会阻止任何形式的解构吗?宏给它们提高了性能吗?
(make-route :get "/some_path" some_handler)
Run Code Online (Sandbox Code Playgroud)
难道不能使用宏包装器将破坏语法传递给函数吗?