小编Adr*_*san的帖子

Clojure doseq会产生巨大的代码吗?

我最近一直在玩clojure并遇到了一个我不确定如何处理的问题.我有一个带有7个参数的doseq,它扩展到一个巨大的块,几乎超过了最大的类大小.为什么doseq扩展到如此巨大的clojure代码块?

例:

(def q '(doseq
[p0 (nth (:params operator) 0 (quote (nil)))
p1 (nth (:params operator) 1 (quote (nil)))
p2 (nth (:params operator) 2 (quote (nil)))
p3 (nth (:params operator) 3 (quote (nil)))
p4 (nth (:params operator) 4 (quote (nil)))
p5 (nth (:params operator) 5 (quote (nil)))
p6 (nth (:params operator) 6 (quote (nil)))]
(do-print board (:oname operator) p0 p1 p2 p3 p4 p5 p6)))
Run Code Online (Sandbox Code Playgroud)

然后:

(macroexpand q)
Run Code Online (Sandbox Code Playgroud)

在我的机器上,这提供了大量的代码(97331字节).这是正常的还是我做错了什么?运算符是一个简单的defrecord.如果有兴趣的话,这里是扩展结果的链接:http://pastebin.com/6gw1q078

编辑:

通过做同样的事情,但是使用for form,我得到的东西要小几个数量级(3653字节):

(def q '(for
[p0 …
Run Code Online (Sandbox Code Playgroud)

macros code-generation clojure

6
推荐指数
1
解决办法
384
查看次数

重启时XMonad确认

我是 Haskell 初学者,我正在使用 xmonad。我试图让它在退出之前提示我,因为我偶尔会意外地按 mod+q。我找到了两种方法,但我一定做错了什么,因为它们都不适合我: https://bbs.archlinux.org/viewtopic.php? id=120298 http://comments.gmane。 org/gmane.comp.lang.haskell.xmonad/11699

这是我的 xmonad.hs:

import XMonad
import XMonad.Config.Gnome
import XMonad.Actions.Plane
import XMonad.Util.EZConfig
import XMonad.Util.Run(spawnPipe)
import qualified Data.Map as M
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.UrgencyHook
import System.IO(Handle, hPutStrLn)
import System.Exit
import Control.Monad
import XMonad
import XMonad.Util.EZConfig
import XMonad.Util.Dmenu
import XMonad.Util.Run

workspaces' = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]

quit_confirm :: X ()
quit_confirm = do
  let m = "confirm restart"
  s <- dmenu [m]
  when (m == s) (spawn …
Run Code Online (Sandbox Code Playgroud)

haskell xmonad

5
推荐指数
1
解决办法
2466
查看次数

错误:格式字符串中所需的非负宽度(1)

我正在尝试使用gfortran编译一段代码,但是它失败并出现以下错误:

Error: Nonnegative width required in format string at (1)
../src/powmes.f90:410.20:
     write(lunit,'(I,E,E,E)') wavenum(k),power(k),nmodes(k),errorexpan(k)

414   if (filepower_fold(1:1) /= '#') then
415      fileout=trim(filepower_fold)//'.waven'
416      if (verbose) write(*,*) 'Output '//trim(fileout)
417      open(file=fileout,form='formatted',status='unknown',unit=lunit,err=2)
418      do k=0,ngrid/2
419         do ifold=0,nfoldpow-1
420            write(lunit,'(I,$)') waven(k,ifold)
421         enddo
422         write(lunit,'(I)') waven(k,nfoldpow)
423      enddo
424      close(lunit)
Run Code Online (Sandbox Code Playgroud)

我该怎么编译呢?

fortran gfortran

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

提升rtree的框与段有错误的交集

Boost rtree为段查询的某些交集提供了错误的交集结果.在这种情况下,边界框是y = 0时的y平面10×10平方.我正在查询从(2,1,0)到(2,1,10)的z对齐线.有趣的是,如果我使用一个框进行查询而不是一个段,那么它会按预期工作.当框不是平面时,也会出现此行为,只需将最小角移动到(0,-5,0),它仍然会发生.

我使用这个错误还是增强中的错误?

编辑:在Boost 1.56和1.59上试过这个.

#include <vector>
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/geometries/box.hpp>
#include <boost/geometry/geometries/segment.hpp>
#include <boost/geometry/index/rtree.hpp>
#include <vector>
#include <iterator>
#include <memory>

namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
typedef bg::model::point<double, 3, bg::cs::cartesian> point_def;
typedef bg::model::box<point_def> box;
typedef bg::model::segment<point_def> segment;
typedef std::pair<box, size_t> tri_box;
typedef bgi::rtree< tri_box, bgi::linear<8>> tree_type;

using namespace std;

TEST(boost_rtree, cant_intersect_box_with_segment) {
  vector<tri_box> buff(1);
  buff[0].first = box{point_def{0, 0, 0}, point_def{10, 0, 10}};
  buff[0].second = 1;
  tree_type tree(buff);

  segment query{point_def{2, …
Run Code Online (Sandbox Code Playgroud)

c++ boost r-tree boost-geometry

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