小编Car*_*ate的帖子

我怎么能把它写成隐式递归?

我正在尝试编写一个可以采用简单方程的字符串表示的模块,并对其进行评估.作为第一步,我需要将等式划分为单个令牌; 基于"规则" takePiece.我试着写作cutEqu一个折叠,但遇到了我不是真的折叠在字符串上的问题; 我正在服用不同大小的碎片,直到它耗尽.我可以作弊,让它折叠在一个等于字符串长度的数字列表上,但这看起来很笨拙.

在我读过的大多数指南中,他们注意到一旦你理解了隐式递归模式(比如折叠和贴图),显式递归就很少发生,这似乎是一种潜在的常见情况,但找不到合适的标准函数处理它.有人会如何cutEqu使用隐式递归来编写简单的东西?我确信我可以找出一个简单的函数来封装行为,但是标准库中尚未存在它表明我可能会认为这个场景是错误的.

import Data.Char

isLit :: String -> Bool
isLit = isDigit . head

takePiece :: String -> (String,String)
takePiece str
    | isLit str = break (not . isDigit) str
    | otherwise = splitAt 1 str

cutEqu :: String -> [String]
cutEqu [] = []
cutEqu xs = let (p,rest) = takePiece xs in
            p : cutEqu rest
Run Code Online (Sandbox Code Playgroud)

编辑:这是我试图隐含地写它:

consumeWith :: ([a] -> ([b],[a])) -> [a] -> [[b]]
consumeWith _ [] = …
Run Code Online (Sandbox Code Playgroud)

haskell

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

仅使用 HTML 正确填充电子邮件

对于作业,我需要form在我的网页中放置一个,并让表单填充一封电子邮件供用户发送。

我在四处搜寻后写下了这个:

<form enctype="text/plain" method="post" action="mailto:[My Email Here]">
    <input type="text" name="subject" value="Subject" />
    <input type="text" name="body" value="Body" />

    <input type="submit" name="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

正如我所期望的,它会打开我的邮件客户端并为我填充一封电子邮件。问题是,它的填充方式非常丑陋且不直观。主题行留空,正文填充:

subject=Subject

body=Body

submit=Submit

(4 lines of white-space)
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望“主题”最终出现在主题中,“正文”字段成为唯一出现在正文中的内容,并且“提交”根本不会出现在用户面前。

这可能吗?

此时我只被允许使用 HTML。(仅限 HTML。不允许内联脚本)。

html forms

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

无法创建系统协议

我正在编写一个实体组件系统。我的部分计划是制定一个称为System系统必须满足的协议才能使用 ECS。

问题是,如果我尝试创建一个名为System;的协议,Clojure 会抱怨。似乎是因为它与java.lang.System.

(ns entity.system)

(defprotocol System
  ; Protocol methods)
Run Code Online (Sandbox Code Playgroud)

产量

CompilerException java.lang.RuntimeException: Expecting var, but System 被映射到类 java.lang.System,编译:(C:\Users\slomi\IdeaProjects\entity\src\entity\system.clj:3:1)

我尝试System通过添加(:refer-clojure :exclude [System])和来排除(:refer-clojure :exclude [java.lang.System]),但都没有做任何事情;我再次收到同样的错误。

当然,我可以给它起别的名字,但System似乎是最合适的名字,而且类似entity.entity-system/Entity-System甚至entity.system/Entity-System似乎过于多余的名字。

如何java.lang.System从命名空间中排除?

protocols clojure

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

Lein 检查:case 有 int 测试,但测试的表达式不是原始的

我正在编写标准的高/低猜谜游戏,但带有“AI”(尽管这是一个慷慨的术语)。

下面的函数取一个数字范围内的最低和最高数字、先前的猜测和“方向”,该“方向”表示先前的猜测是否太低、太高或正确,并返回新的数字范围猜测。

(defn new-range [min-n max-n guess direction]
  (case direction
    1 [min-n guess]
    -1 [guess max-n]
    0 [guess guess]))
Run Code Online (Sandbox Code Playgroud)

当我通过 运行这个函数时lein check,它给了我一个错误/警告:

case has int tests, but tested expression is not primitive.
Run Code Online (Sandbox Code Playgroud)

并指向(case direction

这是什么意思?我搜索了它,但我能找到的只是对定义此错误的源的引用。

这是我应该担心的吗?我尝试了 type-annotating direction,但这并没有改变任何东西。

编辑:事实证明,当我尝试注释时direction,我不小心使用了 boxed-type Long。哎呀。

clojure switch-statement

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

TypeError:/不支持的操作数类型:

对于此代码,我有"TypeError:/ support支持的操作数类型"

class Foo(object):
    def __add__(self, other):
        return print("add")
    def __div__(self, other):
        return print("div")


Foo() + Foo()
add
Run Code Online (Sandbox Code Playgroud)

**但对于/**

Foo() / Foo()
Traceback (most recent call last):

  File "<ipython-input-104-8efbe0dde481>", line 1, in <module>
    Foo() / Foo()

TypeError: unsupported operand type(s) for /: 'Foo' and 'Foo'
Run Code Online (Sandbox Code Playgroud)

python generator

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

Clojure给出反射警告depsite类型提示

我正在编写一个聊天客户端/服务器,并且具有以下带有套接字的代码,并返回一个可以用来更容易地写入套接字的clojure.core.async/channel.

我的问题是,尽管是类型提示,我仍然得到反映警告,呼叫.write无法解决.

(ns chat.main
  (:require [clojure.core.async :as a :refer [>! >!! <! <!! go thread chan]])

  (:import [java.net Socket ServerSocket]
           [java.io InputStream BufferedReader InputStreamReader OutputStream BufferedOutputStream PrintWriter]))

(set! *warn-on-reflection* true)

(defn new-output-chan [^Socket sock]
  (let [^OutputStream out (.getOutputStream sock)
        ^PrintWriter p-out (PrintWriter. out)
        out-chan (chan)]
    (go
      (while (.isConnected sock)
        (let [^String message (<! out-chan)]
          (.write p-out message) ; <---------- Here
          (.flush p-out)))
      (a/close! out-chan))
    out-chan))
Run Code Online (Sandbox Code Playgroud)

得到:

Reflection warning, C:\Users\slomi\IdeaProjects\chat\src\chat\main.clj:44:5 - call to method write on java.io.PrintWriter can't be …
Run Code Online (Sandbox Code Playgroud)

clojure type-hinting

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

双打正在污染我的BigDecimal数学

我正在写一个Mandelbrot Set资源管理器.我需要尽可能多的精度,所以我可以尽可能放大.

我注意到混合doubles和BigDecimals 的不幸副作用:它们"污染"了返回的类型:

(type (* 1M 2))
=> java.math.BigDecimal

(type (* 1M 2.0))
=> java.lang.Double
Run Code Online (Sandbox Code Playgroud)

我期待相反.BigDecimals可能更精确,应该污染双打.

除了手动调用bigdec可能与a接触的每个数字之外BigDecimal,还有一种方法可以防止doubledoubles和BigDecimals 上进行数学运算时自动降级吗?

clojure

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

为什么字符集似乎是有序的?

我一直的印象是那台是没有顺序的下,但注意到,人物套似乎下令:

(seq #{\e \c \b \z \a}) 

=> (\a \b \c \e \z)
Run Code Online (Sandbox Code Playgroud)

如果我介绍其他类型的字符,似乎它们是根据字符的代码进行排序:

(seq #{\e \A \c \space \b \z \a})

=> (\space \A \a \b \c \e \z)
Run Code Online (Sandbox Code Playgroud)

为什么字符根据其代码进行排序,但数字集似乎有任意排序?

clojure set

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

如何更改 Clojure 中的原子图?

我是 clojure 新手,我需要更新此原子内的两个值:

(def app-state (atom {:id "1":status 0 :st 0}))
Run Code Online (Sandbox Code Playgroud)

我使用以下内容:

(let [value (mod (+ (:st @app-state) 1) 4)]
    (swap! app-state update-in [:status] value)
    (swap! app-state update-in [:st] inc))
Run Code Online (Sandbox Code Playgroud)

我越来越:

Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn
Run Code Online (Sandbox Code Playgroud)

clojure

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

C++处理临时对象和数组的正确方法是什么

最近我读了很多关于排序算法的文章,我发现了让我感到困惑的奇怪之处.在函数中,它需要在for循环中创建一个临时数组.示例代码是

for(;;)//ignore the condition
{
    int *b = new int[N];
    //some code
    delete b[];
}
Run Code Online (Sandbox Code Playgroud)

问题是:为什么不在没有new运算符的情况下直接创建它,因为编译器会自动销毁它并在每次迭代后释放内存.就像在循环中写这个

int b[N];
Run Code Online (Sandbox Code Playgroud)

在前面,我总是使用这个方法来创建临时类型/对象.我完全错了或类似数组的内容与内置类型不同?

那么,Stack Overflowers,有人能给我一些建议吗?

c++

2
推荐指数
1
解决办法
118
查看次数